package main import ( "log" "github.com/rosti-cz/node-api/apps" "github.com/rosti-cz/node-api/common" "github.com/rosti-cz/node-api/docker" ) // updateUsage updates various resource usage of the container/app in the database func updateUsage(name string) error { processor := apps.AppsProcessor{ DB: common.GetDBConnection(), } app, err := processor.Get(name) if err != nil { return err } container := docker.Container{ App: app, } state, err := container.GetState() if err != nil { return err } err = processor.UpdateResources( name, state.State, state.CPUUsage, state.MemoryUsage, state.DiskUsageBytes, state.DiskUsageInodes, ) return err } // Updates only container's state func updateState(name string) error { processor := apps.AppsProcessor{ DB: common.GetDBConnection(), } app, err := processor.Get(name) if err != nil { return err } container := docker.Container{ App: app, } state, err := container.Status() if err != nil { return err } err = processor.UpdateState( app.Name, state, ) return err } // gatherStats loops over all applications and calls updateUsage to write various metric into the database. func gatherStats() error { processor := apps.AppsProcessor{ DB: common.GetDBConnection(), } appList, err := processor.List() if err != nil { return err } for _, app := range *appList { err := updateUsage(app.Name) if err != nil { log.Println("STATS ERROR:", err.Error()) } } return nil } // gatherStates loops over all apps and updates their container state func gatherStates() error { processor := apps.AppsProcessor{ DB: common.GetDBConnection(), } appList, err := processor.List() if err != nil { return err } for _, app := range *appList { err := updateState(app.Name) if err != nil { log.Println("STATE ERROR:", err.Error()) } } return nil }