Delete labels fix, initial work on node endpoint
This commit is contained in:
		
							parent
							
								
									753bd452fb
								
							
						
					
					
						commit
						e6f8d49cc8
					
				
					 6 changed files with 103 additions and 6 deletions
				
			
		
							
								
								
									
										11
									
								
								api.http
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								api.http
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -7,7 +7,7 @@ Content-type: application/json
 | 
			
		|||
    "http_port": 46501,
 | 
			
		||||
    "image": "docker.io/rosti/runtime:2020.04-1",
 | 
			
		||||
    "cpu": 100,
 | 
			
		||||
    "memory": 128000
 | 
			
		||||
    "memory": 128
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
| 
						 | 
				
			
			@ -83,3 +83,12 @@ Content-type: application/json
 | 
			
		|||
{
 | 
			
		||||
    "Value": "userid:cx"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
DELETE http://localhost:1323/v1/apps/test_1234/labels
 | 
			
		||||
Content-type: application/json
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    "Value": "userid:cx"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -14,5 +14,6 @@ require (
 | 
			
		|||
	github.com/opencontainers/go-digest v1.0.0 // indirect
 | 
			
		||||
	github.com/pkg/errors v0.9.1 // indirect
 | 
			
		||||
	github.com/satori/go.uuid v1.2.0
 | 
			
		||||
	github.com/shirou/gopsutil v2.20.6+incompatible
 | 
			
		||||
	golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								go.sum
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -1,5 +1,9 @@
 | 
			
		|||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 | 
			
		||||
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
 | 
			
		||||
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
 | 
			
		||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
 | 
			
		||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
 | 
			
		||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
 | 
			
		||||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
 | 
			
		||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 | 
			
		||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +23,8 @@ github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw
 | 
			
		|||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 | 
			
		||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 | 
			
		||||
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
 | 
			
		||||
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
 | 
			
		||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 | 
			
		||||
github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU=
 | 
			
		||||
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +71,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
 | 
			
		|||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 | 
			
		||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 | 
			
		||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 | 
			
		||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 | 
			
		||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +81,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 | 
			
		|||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 | 
			
		||||
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 | 
			
		||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 | 
			
		||||
github.com/shirou/gopsutil v2.20.6+incompatible h1:P37G9YH8M4vqkKcwBosp+URN5O8Tay67D2MbR361ioY=
 | 
			
		||||
github.com/shirou/gopsutil v2.20.6+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 | 
			
		||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 | 
			
		||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 | 
			
		||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 | 
			
		||||
| 
						 | 
				
			
			@ -107,11 +117,13 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
 | 
			
		|||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
 | 
			
		||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								main.go
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -274,11 +274,16 @@ func main() {
 | 
			
		|||
	})
 | 
			
		||||
 | 
			
		||||
	// Removes existing label
 | 
			
		||||
	e.DELETE("/v1/apps/:name/labels/:label", func(c echo.Context) error {
 | 
			
		||||
	e.DELETE("/v1/apps/:name/labels", func(c echo.Context) error {
 | 
			
		||||
		name := c.Param("name")
 | 
			
		||||
		label := c.Param("name")
 | 
			
		||||
		label := apps.Label{}
 | 
			
		||||
 | 
			
		||||
		err := apps.RemoveLabel(name, label)
 | 
			
		||||
		err := c.Bind(&label)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return c.JSONPretty(http.StatusBadRequest, Message{Message: err.Error()}, JSONIndent)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = apps.RemoveLabel(name, label.Value)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return c.JSONPretty(http.StatusInternalServerError, Message{Message: err.Error()}, JSONIndent)
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										66
									
								
								nodes/load.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								nodes/load.go
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
package nodes
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
 | 
			
		||||
	"github.com/jinzhu/gorm"
 | 
			
		||||
	"github.com/shirou/gopsutil/cpu"
 | 
			
		||||
	"github.com/shirou/gopsutil/disk"
 | 
			
		||||
	"github.com/shirou/gopsutil/load"
 | 
			
		||||
	"github.com/shirou/gopsutil/mem"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// PerformanceLog keeps track of performance history
 | 
			
		||||
type PerformanceLog struct {
 | 
			
		||||
	gorm.Model
 | 
			
		||||
 | 
			
		||||
	Load1          float64
 | 
			
		||||
	Load5          float64
 | 
			
		||||
	Load15         float64
 | 
			
		||||
	DiskSpaceUsage float64
 | 
			
		||||
	Memory         float64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Log creates a record for all important metrics used as
 | 
			
		||||
func Log() error {
 | 
			
		||||
	performanceLog := PerformanceLog{}
 | 
			
		||||
 | 
			
		||||
	// Load
 | 
			
		||||
	loadStats, err := load.Avg()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	performanceLog.Load1 = loadStats.Load1
 | 
			
		||||
	performanceLog.Load5 = loadStats.Load5
 | 
			
		||||
	performanceLog.Load15 = loadStats.Load15
 | 
			
		||||
 | 
			
		||||
	// Memory
 | 
			
		||||
	memoryStat, err := mem.VirtualMemory()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	performanceLog.Memory = memoryStat.UsedPercent / 100.0
 | 
			
		||||
 | 
			
		||||
	// Disk space
 | 
			
		||||
	diskUsage, err := disk.Usage("/srv")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	performanceLog.DiskSpaceUsage = diskUsage.UsedPercent / 100.0
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Index returns number from 0 to 1 where 0 means least loaded and 1 maximally loaded.
 | 
			
		||||
// It uses history of last 72 hours
 | 
			
		||||
func Index() (float64, error) {
 | 
			
		||||
	// Number of CPUs
 | 
			
		||||
	cpus, err := cpu.Counts(true)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 1.0, err
 | 
			
		||||
	}
 | 
			
		||||
	log.Println(cpus)
 | 
			
		||||
 | 
			
		||||
	return 1.0, err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,13 +2,17 @@ package nodes
 | 
			
		|||
 | 
			
		||||
// Node keeps info about server
 | 
			
		||||
type Node struct {
 | 
			
		||||
	PerformanceIndex int
 | 
			
		||||
	OccupationIndex float32 // bigger number bigger load, number over 1 means full server
 | 
			
		||||
	Memory          int
 | 
			
		||||
	SoldMemory      int     // allocated to containers
 | 
			
		||||
	LoadOverDay     float32 // average load 5 in last 24 hours
 | 
			
		||||
	DiskSpaceUsed   int     // Usage of overall disk space
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetNodeInfo returns information about this node
 | 
			
		||||
func GetNodeInfo() *Node {
 | 
			
		||||
	node := Node{
 | 
			
		||||
		PerformanceIndex: 0,
 | 
			
		||||
		OccupationIndex: 0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &node
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue