Compare commits
No commits in common. "main" and "v3" have entirely different histories.
12 changed files with 3 additions and 255 deletions
|
@ -12,7 +12,7 @@ on:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: [dev, amd64]
|
runs-on: [moon, amd64]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
|
@ -10,7 +10,7 @@ on:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: [dev, amd64]
|
runs-on: [moon, amd64]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,5 +1,3 @@
|
||||||
tmp/
|
tmp/
|
||||||
__debug*
|
__debug*
|
||||||
main
|
main
|
||||||
bin/
|
|
||||||
nodes.json
|
|
||||||
|
|
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
|
@ -29,7 +29,7 @@
|
||||||
"env": {
|
"env": {
|
||||||
"DUMP_PATH": "../tmp/nodes.json",
|
"DUMP_PATH": "../tmp/nodes.json",
|
||||||
"CONFIG_PATH": "../tmp/config.json",
|
"CONFIG_PATH": "../tmp/config.json",
|
||||||
"NODE_PATH": "../tmp/node.json"
|
"NODE_DIR_PATH": "../tmp/node"
|
||||||
},
|
},
|
||||||
"args": [
|
"args": [
|
||||||
"node"
|
"node"
|
||||||
|
|
|
@ -20,8 +20,3 @@ tasks:
|
||||||
- go mod tidy
|
- go mod tidy
|
||||||
- mkdir -p bin
|
- mkdir -p bin
|
||||||
- env CGO_ENABLED=0 go build -o bin/lobby2-{{ .VERSION }}-linux-amd64 cli/*.go
|
- env CGO_ENABLED=0 go build -o bin/lobby2-{{ .VERSION }}-linux-amd64 cli/*.go
|
||||||
deploy:
|
|
||||||
cmds:
|
|
||||||
- task: build
|
|
||||||
- scp bin/lobby2-{{ .VERSION }}-linux-amd64 rosti-db:/usr/local/bin/lobby2.tmp
|
|
||||||
- ssh rosti-db mv /usr/local/bin/lobby2.tmp /usr/local/bin/lobby2
|
|
||||||
|
|
17
api/main.go
17
api/main.go
|
@ -53,7 +53,6 @@ func (a *API) Run() error {
|
||||||
a.e.GET("/nodes", a.listHandler)
|
a.e.GET("/nodes", a.listHandler)
|
||||||
a.e.GET("/nodes/:hostname", a.getHandler)
|
a.e.GET("/nodes/:hostname", a.getHandler)
|
||||||
a.e.POST("/nodes/:hostname", a.refreshHandler)
|
a.e.POST("/nodes/:hostname", a.refreshHandler)
|
||||||
a.e.GET("/prometheus/:service", a.prometheusHandler)
|
|
||||||
|
|
||||||
// Start the server in a goroutine so that it doesn't block the signal listening
|
// Start the server in a goroutine so that it doesn't block the signal listening
|
||||||
return a.e.Start(a.listen)
|
return a.e.Start(a.listen)
|
||||||
|
@ -112,19 +111,3 @@ func (a *API) refreshHandler(c echo.Context) error {
|
||||||
|
|
||||||
return c.NoContent(http.StatusNoContent)
|
return c.NoContent(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary Prometheus service discovery
|
|
||||||
// @Description Return one nodes based on given hostname
|
|
||||||
// @Produce application/json
|
|
||||||
// @Param service path string true "Name of the service like: systemd, pgsql, .."
|
|
||||||
// @Success 200 {array} []nodes.prometheusDiscovery "Node details"
|
|
||||||
// @Failure 401 {object} Message "Forbidden access"
|
|
||||||
// @Security Bearer
|
|
||||||
// @Router /prometheus/{service} [get]
|
|
||||||
func (a *API) prometheusHandler(c echo.Context) error {
|
|
||||||
ss := c.Param("service")
|
|
||||||
|
|
||||||
pds := nodes.GetPrometheusSD(a.np, ss)
|
|
||||||
|
|
||||||
return c.JSONPretty(http.StatusOK, pds, " ")
|
|
||||||
}
|
|
||||||
|
|
|
@ -52,23 +52,3 @@ func printAction(c *cli.Context) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func prometheusAction(c *cli.Context) error {
|
|
||||||
cfg := GetConfig()
|
|
||||||
|
|
||||||
np := nodes.NewNodesProcessor(cfg.DumpPath, cfg.DropAfterSeconds)
|
|
||||||
|
|
||||||
pds := nodes.GetPrometheusSD(np, "node")
|
|
||||||
|
|
||||||
for _, pd := range pds {
|
|
||||||
body, err := json.MarshalIndent(pd, "", " ")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("failed to marshal prometheus discovery: %v\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(string(body))
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -27,11 +27,6 @@ func main() {
|
||||||
Usage: "Prints all discovered nodes",
|
Usage: "Prints all discovered nodes",
|
||||||
Action: printAction,
|
Action: printAction,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Name: "prometheus",
|
|
||||||
Usage: "Prints Prometheus Service Discovery",
|
|
||||||
Action: prometheusAction,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
60
docs/docs.go
60
docs/docs.go
|
@ -145,49 +145,6 @@ const docTemplate = `{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"/prometheus/{service}": {
|
|
||||||
"get": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"Bearer": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Return one nodes based on given hostname",
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"summary": "Prometheus service discovery",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"description": "Name of the service like: systemd, pgsql, ..",
|
|
||||||
"name": "service",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "Node details",
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/nodes.prometheusDiscovery"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"401": {
|
|
||||||
"description": "Forbidden access",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/api.Message"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
@ -224,23 +181,6 @@ const docTemplate = `{
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"nodes.prometheusDiscovery": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"Labels": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Targets": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"securityDefinitions": {
|
"securityDefinitions": {
|
||||||
|
|
|
@ -137,49 +137,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"/prometheus/{service}": {
|
|
||||||
"get": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"Bearer": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Return one nodes based on given hostname",
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"summary": "Prometheus service discovery",
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"description": "Name of the service like: systemd, pgsql, ..",
|
|
||||||
"name": "service",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "Node details",
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/nodes.prometheusDiscovery"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"401": {
|
|
||||||
"description": "Forbidden access",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/api.Message"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
@ -216,23 +173,6 @@
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"nodes.prometheusDiscovery": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"Labels": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Targets": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"securityDefinitions": {
|
"securityDefinitions": {
|
||||||
|
|
|
@ -22,17 +22,6 @@ definitions:
|
||||||
last_update:
|
last_update:
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
nodes.prometheusDiscovery:
|
|
||||||
properties:
|
|
||||||
Labels:
|
|
||||||
additionalProperties:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
Targets:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
type: object
|
|
||||||
info:
|
info:
|
||||||
contact: {}
|
contact: {}
|
||||||
description: API of Lobby 2 project that helps to discover and connect to other
|
description: API of Lobby 2 project that helps to discover and connect to other
|
||||||
|
@ -122,33 +111,6 @@ paths:
|
||||||
security:
|
security:
|
||||||
- Bearer: []
|
- Bearer: []
|
||||||
summary: Refresh node
|
summary: Refresh node
|
||||||
/prometheus/{service}:
|
|
||||||
get:
|
|
||||||
description: Return one nodes based on given hostname
|
|
||||||
parameters:
|
|
||||||
- description: 'Name of the service like: systemd, pgsql, ..'
|
|
||||||
in: path
|
|
||||||
name: service
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: Node details
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
items:
|
|
||||||
$ref: '#/definitions/nodes.prometheusDiscovery'
|
|
||||||
type: array
|
|
||||||
type: array
|
|
||||||
"401":
|
|
||||||
description: Forbidden access
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/api.Message'
|
|
||||||
security:
|
|
||||||
- Bearer: []
|
|
||||||
summary: Prometheus service discovery
|
|
||||||
securityDefinitions:
|
securityDefinitions:
|
||||||
Bearer:
|
Bearer:
|
||||||
in: header
|
in: header
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
package nodes
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
type prometheusDiscovery struct {
|
|
||||||
Labels map[string]string `json:"Labels"`
|
|
||||||
Targets []string `json:"Targets"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetPrometheusSD(p *NodesProcessor, ss string) []prometheusDiscovery {
|
|
||||||
ns := p.List()
|
|
||||||
|
|
||||||
pds := []prometheusDiscovery{
|
|
||||||
{
|
|
||||||
Labels: make(map[string]string),
|
|
||||||
Targets: []string{},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, node := range ns {
|
|
||||||
port, ok := node.KV["prometheus_port"]
|
|
||||||
if !ok {
|
|
||||||
port = "9999"
|
|
||||||
}
|
|
||||||
host, ok := node.KV["prometheus_host"]
|
|
||||||
if !ok {
|
|
||||||
host = node.HostName
|
|
||||||
}
|
|
||||||
|
|
||||||
v, ok := node.KV["prometheus_exporters"]
|
|
||||||
if ok {
|
|
||||||
services := strings.Split(v, ",")
|
|
||||||
for _, service := range services {
|
|
||||||
if ss == service {
|
|
||||||
pds[0].Targets = append(pds[0].Targets, fmt.Sprintf("%s:%s", host, port))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return pds
|
|
||||||
}
|
|
Loading…
Reference in a new issue