* full implementation of snapshots * tests of the snapshot backend * Drone CI pipeline * New snapshots handlers * Filesystem driver * S3 driver
		
			
				
	
	
		
			106 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
}
 |