2018-07-25 21:52:17 +02:00
package endpoints
import (
"log"
"net/http"
2018-09-10 12:01:38 +02:00
httperror "github.com/portainer/libhttp/error"
"github.com/portainer/libhttp/response"
2018-07-25 21:52:17 +02:00
"github.com/portainer/portainer"
)
// POST request on /api/endpoints/snapshot
func ( handler * Handler ) endpointSnapshot ( w http . ResponseWriter , r * http . Request ) * httperror . HandlerError {
endpoints , err := handler . EndpointService . Endpoints ( )
if err != nil {
return & httperror . HandlerError { http . StatusInternalServerError , "Unable to retrieve endpoints from the database" , err }
}
for _ , endpoint := range endpoints {
if endpoint . Type == portainer . AzureEnvironment {
continue
}
2018-11-13 15:18:38 +13:00
snapshot , snapshotError := handler . Snapshotter . CreateSnapshot ( & endpoint )
latestEndpointReference , err := handler . EndpointService . Endpoint ( endpoint . ID )
if latestEndpointReference == nil {
log . Printf ( "background schedule error (endpoint snapshot). Endpoint not found inside the database anymore (endpoint=%s, URL=%s) (err=%s)\n" , endpoint . Name , endpoint . URL , err )
continue
}
latestEndpointReference . Status = portainer . EndpointStatusUp
if snapshotError != nil {
log . Printf ( "background schedule error (endpoint snapshot). Unable to create snapshot (endpoint=%s, URL=%s) (err=%s)\n" , endpoint . Name , endpoint . URL , snapshotError )
latestEndpointReference . Status = portainer . EndpointStatusDown
2018-07-25 21:52:17 +02:00
}
if snapshot != nil {
2018-11-13 15:18:38 +13:00
latestEndpointReference . Snapshots = [ ] portainer . Snapshot { * snapshot }
2018-07-25 21:52:17 +02:00
}
2018-11-13 15:18:38 +13:00
err = handler . EndpointService . UpdateEndpoint ( latestEndpointReference . ID , latestEndpointReference )
2018-07-25 21:52:17 +02:00
if err != nil {
return & httperror . HandlerError { http . StatusInternalServerError , "Unable to persist endpoint changes inside the database" , err }
}
}
return response . Empty ( w )
}