Skip to content

Commit

Permalink
agentapi: ignore request when update is not available
Browse files Browse the repository at this point in the history
  • Loading branch information
gustavosbarreto committed Oct 23, 2018
1 parent 5b1af9c commit 5d6cb2a
Showing 1 changed file with 49 additions and 41 deletions.
90 changes: 49 additions & 41 deletions api/agentapi/agentapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,21 @@ func (api *AgentAPI) GetRolloutForDevice(c echo.Context) error {

uid := sha256.Sum256(deviceIdentity)

device := &models.Device{
UID: fmt.Sprintf("%x", uid),
Version: metadata.Version,
Hardware: metadata.Hardware,
ProductUID: metadata.ProductUID,
DeviceIdentity: metadata.DeviceIdentity,
DeviceAttributes: metadata.DeviceAttributes,
LastSeen: time.Now(),
var device models.Device
if err = api.db.One("UID", uid, &device); err != nil && err != storm.ErrNotFound {
return err
}

if metadata.LastInstalledPackage != "" {
device.Status = "updated"
if device.UID == "" {
device.UID = fmt.Sprintf("%x", uid)
}

if err := api.db.Save(device); err != nil {
return err
}
device.Version = metadata.Version
device.Hardware = metadata.Hardware
device.ProductUID = metadata.ProductUID
device.DeviceIdentity = metadata.DeviceIdentity
device.DeviceAttributes = metadata.DeviceAttributes
device.LastSeen = time.Now()

var rollouts []models.Rollout
if err = api.db.All(&rollouts); err != nil {
Expand All @@ -85,47 +83,57 @@ func (api *AgentAPI) GetRolloutForDevice(c echo.Context) error {
}

if rollout == nil || !rollout.Running {
device.Version = metadata.Version

if err := api.db.Save(&device); err != nil {
return err
}

return c.NoContent(http.StatusNotFound)
}

if device.Status == "updated" {
if rollout != nil {
report := models.Report{
Device: device.UID,
Rollout: rollout.ID,
Status: "updated",
Timestamp: time.Now(),
IsError: false,
Virtual: true,
}
var pkg models.Package
if err := api.db.One("UID", rollout.Package, &pkg); err != nil {
return err
}

if err := api.db.Save(&report); err != nil {
return err
}
if pkg.Version == metadata.Version {
report := models.Report{
Device: device.UID,
Rollout: rollout.ID,
Status: "updated",
Timestamp: time.Now(),
IsError: false,
Virtual: true,
}

finished, err := rollout.IsFinished(api.db)
if err != nil {
return err
}
if err := api.db.Save(&report); err != nil {
return err
}

device.Status = "updated"

if err := api.db.Save(&device); err != nil {
return err
}

if !finished {
rollout.FinishedAt = time.Now()
rollout.Running = false
finished, err := rollout.IsFinished(api.db)
if err != nil {
return err
}

if !finished {
rollout.FinishedAt = time.Now()
rollout.Running = false

if err = api.db.Save(rollout); err != nil {
return err
}
if err = api.db.Save(rollout); err != nil {
return err
}
}

return c.NoContent(http.StatusNotFound)
}

var pkg models.Package
if err := api.db.One("UID", rollout.Package, &pkg); err != nil {
return err
}

c.Response().Header().Set("UH-Signature", string(pkg.Signature))
c.Response().WriteHeader(http.StatusOK)

Expand Down

0 comments on commit 5d6cb2a

Please sign in to comment.