From 0cda2dd742c0ae7c2009a18801970e0d352e8abc Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 10:51:26 +0200 Subject: [PATCH 01/11] Relabel --- app/handlers.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/handlers.go b/app/handlers.go index c020255..e1e7951 100644 --- a/app/handlers.go +++ b/app/handlers.go @@ -87,7 +87,13 @@ func (h *Handler) ScrapeTargets(w http.ResponseWriter, req *http.Request) { "id": t.ID, } for i, tag := range t.Tags { - labels[fmt.Sprintf("tag_%d", i)] = tag + parts := strings.SplitN(tag, ":", 2) + if len(parts) < 2 { + labels[fmt.Sprintf("tag_%d", i)] = tag + continue + } + labels[parts[0]] = parts[1] + } result = append(result, map[string]any{ "targets": []string{fmt.Sprintf("%s:%d", t.Address, t.Port)}, -- GitLab From b2bb8ae30da5994df76480994beae883648604f4 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 11:17:42 +0200 Subject: [PATCH 02/11] Test --- app/handlers.go | 1 - 1 file changed, 1 deletion(-) diff --git a/app/handlers.go b/app/handlers.go index e1e7951..69c86fb 100644 --- a/app/handlers.go +++ b/app/handlers.go @@ -93,7 +93,6 @@ func (h *Handler) ScrapeTargets(w http.ResponseWriter, req *http.Request) { continue } labels[parts[0]] = parts[1] - } result = append(result, map[string]any{ "targets": []string{fmt.Sprintf("%s:%d", t.Address, t.Port)}, -- GitLab From 80fd5c02d5cf1e7601f9aa115bddc5b5c4866465 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 11:30:19 +0200 Subject: [PATCH 03/11] Added debug symbols --- app/handlers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/app/handlers.go b/app/handlers.go index 69c86fb..944cfe9 100644 --- a/app/handlers.go +++ b/app/handlers.go @@ -88,6 +88,7 @@ func (h *Handler) ScrapeTargets(w http.ResponseWriter, req *http.Request) { } for i, tag := range t.Tags { parts := strings.SplitN(tag, ":", 2) + log.Printf("Parts %v", parts) if len(parts) < 2 { labels[fmt.Sprintf("tag_%d", i)] = tag continue -- GitLab From 3f6a37af77b0c018bb6f217e9fa39400e1aad605 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 12:09:01 +0200 Subject: [PATCH 04/11] Added version --- cmd/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/main.go b/cmd/main.go index 8dd3aa4..0654e67 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -54,6 +54,6 @@ func main() { if port == "" { port = "8080" } - app.LogJSON("info", "server started", map[string]any{"port": port}) + app.LogJSON("info", "server started (version 0.4)", map[string]any{"port": port}) log.Fatal(http.ListenAndServe(":"+port, nil)) } -- GitLab From 1f4386e34d8a17fa39a95ca55469c517f8252cf3 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 12:18:31 +0200 Subject: [PATCH 05/11] Removed debug Symbols --- app/handlers.go | 1 - 1 file changed, 1 deletion(-) diff --git a/app/handlers.go b/app/handlers.go index 944cfe9..69c86fb 100644 --- a/app/handlers.go +++ b/app/handlers.go @@ -88,7 +88,6 @@ func (h *Handler) ScrapeTargets(w http.ResponseWriter, req *http.Request) { } for i, tag := range t.Tags { parts := strings.SplitN(tag, ":", 2) - log.Printf("Parts %v", parts) if len(parts) < 2 { labels[fmt.Sprintf("tag_%d", i)] = tag continue -- GitLab From 9c838ddca2509c3dd7e025e4aee7b54751fc06df Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 12:35:13 +0200 Subject: [PATCH 06/11] Using tag map instead --- app/handlers.go | 9 ++------- app/model.go | 10 +++++----- app/templates/pages/index.html | 7 +++++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/app/handlers.go b/app/handlers.go index 69c86fb..89b7051 100644 --- a/app/handlers.go +++ b/app/handlers.go @@ -86,13 +86,8 @@ func (h *Handler) ScrapeTargets(w http.ResponseWriter, req *http.Request) { "job": job, "id": t.ID, } - for i, tag := range t.Tags { - parts := strings.SplitN(tag, ":", 2) - if len(parts) < 2 { - labels[fmt.Sprintf("tag_%d", i)] = tag - continue - } - labels[parts[0]] = parts[1] + for key, value := range t.Labels { + labels[key] = value } result = append(result, map[string]any{ "targets": []string{fmt.Sprintf("%s:%d", t.Address, t.Port)}, diff --git a/app/model.go b/app/model.go index faef4c8..a35d83f 100644 --- a/app/model.go +++ b/app/model.go @@ -1,11 +1,11 @@ package app -// Target defines a single service instance with unique ID and tags +// Target defines a single service instance with unique ID and labels type Target struct { - ID string `json:"ID"` - Address string `json:"Address"` - Port int `json:"Port"` - Tags []string `json:"Tags,omitempty"` + ID string `json:"ID"` + Address string `json:"Address"` + Port int `json:"Port"` + Labels map[string]string `json:"Labels,omitempty"` } // JobGroup maps a job name to a slice of targets diff --git a/app/templates/pages/index.html b/app/templates/pages/index.html index dae475a..eb44d1b 100644 --- a/app/templates/pages/index.html +++ b/app/templates/pages/index.html @@ -22,10 +22,13 @@ -d '{ "Job": "node-exporter", "Target": { - "ID": "node1", + "ID": "server1", "Address": "10.0.0.1", "Port": 9100, - "Tags": ["linux"] + "Labels": { + "server": "server1", + "host": "node1" + } } }'</code></pre> {{end}} -- GitLab From 50906ada3acf9936037caaf3f3b091a71ba08f0a Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 12:36:50 +0200 Subject: [PATCH 07/11] Service changed as well --- app/templates/pages/service.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/templates/pages/service.html b/app/templates/pages/service.html index b3d298e..d62cdc7 100644 --- a/app/templates/pages/service.html +++ b/app/templates/pages/service.html @@ -21,12 +21,12 @@ <td>{{ .Address }}</td> <td>{{ .Port }}</td> <td> - {{- if .Tags -}} - {{- range $i, $t := .Tags -}} - {{ if $i }}, {{ end }}<span class="badge bg-secondary">{{ $t }}</span> + {{- if .Labels -}} + {{- range $i, $l := .Labels -}} + {{ if $i }}, {{ end }}<span class="badge bg-secondary">{{ $l }}</span> {{- end -}} {{ else }} - <span class="text-muted">-</span> + <span class="text-muted">No labels available</span> {{ end }} </td> </tr> -- GitLab From a3f78a393e40397d0ffa484febbf0006a7022ec7 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 12:59:25 +0200 Subject: [PATCH 08/11] Service Tags --- app/templates/pages/service.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/templates/pages/service.html b/app/templates/pages/service.html index d62cdc7..a0a4251 100644 --- a/app/templates/pages/service.html +++ b/app/templates/pages/service.html @@ -23,7 +23,7 @@ <td> {{- if .Labels -}} {{- range $i, $l := .Labels -}} - {{ if $i }}, {{ end }}<span class="badge bg-secondary">{{ $l }}</span> + <span class="badge">{{ $i }}:{{ $l }}</span> {{- end -}} {{ else }} <span class="text-muted">No labels available</span> -- GitLab From e8a524ee8958f8c62d11610b1af6fcde4dd87bf6 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 13:13:27 +0200 Subject: [PATCH 09/11] More Services --- app/templates/pages/service.html | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/templates/pages/service.html b/app/templates/pages/service.html index a0a4251..58c7baf 100644 --- a/app/templates/pages/service.html +++ b/app/templates/pages/service.html @@ -4,6 +4,22 @@ {{ if not .Targets }} <div class="alert alert-warning">No targets registered for this job.</div> + <h2 class="mt-5">Register curl</h2> + <pre><code>curl -X POST http://localhost:8080/api/v1/service/register \ + -H "Authorization: Bearer <token>" \ + -H "Content-Type: application/json" \ + -d '{ + "Job": "node-exporter", + "Target": { + "ID": "server1", + "Address": "10.0.0.1", + "Port": 9100, + "Labels": { + "server": "server1", + "host": "node1" + } + } + }'</code></pre> {{ else }} <table class="table table-striped"> <thead> -- GitLab From d80cb5b1ee8a98db39067df2c5e93cf6f65bb969 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 15:03:47 +0200 Subject: [PATCH 10/11] Raw view --- app/templates/pages/service.html | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/templates/pages/service.html b/app/templates/pages/service.html index 58c7baf..0949732 100644 --- a/app/templates/pages/service.html +++ b/app/templates/pages/service.html @@ -1,6 +1,7 @@ {{ template "base" .}} {{ define "content" }} <h1 class="mb-4">Service: {{ .Job }}</h1> +Raw view is: <a href="/api/v1/sd/{{ .Job }}"> here</a><br> {{ if not .Targets }} <div class="alert alert-warning">No targets registered for this job.</div> @@ -49,9 +50,11 @@ {{ end }} </tbody> </table> + <h2 class="mt-5">Deregister curl</h2> + <pre><code>curl -X POST http://localhost:8080/api/v1/service/deregister/{{ .Job }}/<target_id> \ + -H "Authorization: Bearer <token>"</code> + </pre> {{ end }} -<h2 class="mt-5">Deregister curl</h2> -<pre><code>curl -X POST http://localhost:8080/api/v1/service/deregister/{{ .Job }}/<target_id> \ - -H "Authorization: Bearer <token>"</code></pre> + {{ end }} -- GitLab From 940a450a916910c6d451ecad26b29dcb7d5651d7 Mon Sep 17 00:00:00 2001 From: Aleksandr Muravja <aleks.muravja@gmail.com> Date: Mon, 14 Apr 2025 15:32:00 +0200 Subject: [PATCH 11/11] Updated README --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5441292..889b0bb 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ It supports dynamic target registration with per-target tags, JSON API, and a Bo | `POST` | `/api/v1/service/deregister/{job}/{id}` | Deregister target | | `GET` | `/api/v1/service/{job}` | List targets for job | | `GET` | `/api/v1/services` | List all jobs | +| `GET` | `/api/v1/sd/{job}` | List all jobs in raw json | --- @@ -71,7 +72,10 @@ Stored under `data/` as `<job>.json`: "ID": "node1", "Address": "10.0.0.1", "Port": 9100, - "Tags": ["linux"] + "Labels": { + "server": "node1", + "host": "host1" + } } ] ``` -- GitLab