Skip to content

Commit 3d5de0d

Browse files
committed
prometheus poc
1 parent ef644a8 commit 3d5de0d

File tree

7 files changed

+63
-9
lines changed

7 files changed

+63
-9
lines changed

chart-sync/App.go

+21-7
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
11
package main
22

33
import (
4+
"github.com/devtron-labs/chart-sync/internals"
45
"github.com/devtron-labs/chart-sync/pkg"
56
"github.com/go-pg/pg"
7+
"github.com/prometheus/client_golang/prometheus/promhttp"
68
"go.uber.org/zap"
9+
"net/http"
10+
"time"
711
)
812

913
type App struct {
10-
Logger *zap.SugaredLogger
11-
db *pg.DB
12-
syncService pkg.SyncService
14+
Logger *zap.SugaredLogger
15+
db *pg.DB
16+
syncService pkg.SyncService
17+
configuration *internals.Configuration
1318
}
1419

1520
func NewApp(Logger *zap.SugaredLogger,
1621
db *pg.DB,
17-
syncService pkg.SyncService) *App {
22+
syncService pkg.SyncService,
23+
configuration *internals.Configuration) *App {
1824
return &App{
19-
Logger: Logger,
20-
db: db,
21-
syncService: syncService,
25+
Logger: Logger,
26+
db: db,
27+
syncService: syncService,
28+
configuration: configuration,
2229
}
2330
}
2431

2532
func (app *App) Start() {
33+
// Set up the /metrics endpoint for Prometheus to scrape
34+
http.Handle("/metrics", promhttp.Handler())
35+
36+
// Start the sync service
2637
_, err := app.syncService.Sync()
38+
// sleep for ShutDownInterval seconds to give time for prometheus to scrape the metrics
39+
time.Sleep(time.Duration(app.configuration.ShutDownInterval) * time.Second)
40+
2741
if err != nil {
2842
app.Logger.Errorw("err", "err", err)
2943
}

chart-sync/env_gen.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"Category":"DEVTRON","Fields":[{"Env":"APP","EnvType":"string","EnvValue":"chart-sync","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"APP_STORE_APPLICATION_VERSIONS_SAVE_CHUNK_SIZE","EnvType":"int","EnvValue":"20","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"CHART_PROVIDER_ID","EnvType":"string","EnvValue":"*","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"IS_OCI_REGISTRY","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"LOG_LEVEL","EnvType":"int","EnvValue":"0","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PARALLELISM_LIMIT_FOR_TAG_PROCESSING","EnvType":"int","EnvValue":"0","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_ADDR","EnvType":"string","EnvValue":"127.0.0.1","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_DATABASE","EnvType":"string","EnvValue":"orchestrator","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_EXPORT_PROM_METRICS","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_LOG_ALL_FAILURE_QUERIES","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_LOG_ALL_QUERY","EnvType":"bool","EnvValue":"false","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_LOG_SLOW_QUERY","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_PASSWORD","EnvType":"string","EnvValue":"password","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_PORT","EnvType":"string","EnvValue":"5432","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_QUERY_DUR_THRESHOLD","EnvType":"int64","EnvValue":"5000","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_USER","EnvType":"string","EnvValue":"user","EnvDescription":"","Example":"","Deprecated":"false"}]}]
1+
[{"Category":"DEVTRON","Fields":[{"Env":"APP","EnvType":"string","EnvValue":"chart-sync","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"APP_STORE_APPLICATION_VERSIONS_SAVE_CHUNK_SIZE","EnvType":"int","EnvValue":"20","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"CHART_PROVIDER_ID","EnvType":"string","EnvValue":"*","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"IS_OCI_REGISTRY","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"LOG_LEVEL","EnvType":"int","EnvValue":"0","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PARALLELISM_LIMIT_FOR_TAG_PROCESSING","EnvType":"int","EnvValue":"0","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_ADDR","EnvType":"string","EnvValue":"127.0.0.1","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_DATABASE","EnvType":"string","EnvValue":"orchestrator","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_EXPORT_PROM_METRICS","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_LOG_ALL_FAILURE_QUERIES","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_LOG_ALL_QUERY","EnvType":"bool","EnvValue":"false","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_LOG_SLOW_QUERY","EnvType":"bool","EnvValue":"true","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_PASSWORD","EnvType":"string","EnvValue":"password","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_PORT","EnvType":"string","EnvValue":"5432","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_QUERY_DUR_THRESHOLD","EnvType":"int64","EnvValue":"5000","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"PG_USER","EnvType":"string","EnvValue":"user","EnvDescription":"","Example":"","Deprecated":"false"},{"Env":"SHUTDOWN_INTERVAL","EnvType":"int","EnvValue":"120","EnvDescription":"","Example":"","Deprecated":"false"}]}]

chart-sync/env_gen.md

+1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@
1919
| PG_PORT | string |5432 | | | false |
2020
| PG_QUERY_DUR_THRESHOLD | int64 |5000 | | | false |
2121
| PG_USER | string |user | | | false |
22+
| SHUTDOWN_INTERVAL | int |120 | | | false |
2223

chart-sync/internals/Configuration.go

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ type Configuration struct {
77
ChartProviderId string `env:"CHART_PROVIDER_ID" envDefault:"*"` // * is used to sync all chart providers; else CHART_PROVIDER_ID should contain chart_repo_id OR docker_artifact_store_id
88
IsOCIRegistry bool `env:"IS_OCI_REGISTRY" envDefault:"true"`
99
ParallelismLimitForTagProcessing int `env:"PARALLELISM_LIMIT_FOR_TAG_PROCESSING" envDefault:"0"`
10+
ShutDownInterval int `env:"SHUTDOWN_INTERVAL" envDefault:"120"`
1011
}
1112

1213
func ParseConfiguration() (*Configuration, error) {

chart-sync/internals/instruments.go

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package internals
2+
3+
import (
4+
"github.com/prometheus/client_golang/prometheus"
5+
"github.com/prometheus/client_golang/prometheus/promauto"
6+
)
7+
8+
var constLabels = map[string]string{"app": "chart-sync"}
9+
10+
var SyncOCIRepo = promauto.NewCounterVec(
11+
prometheus.CounterOpts{
12+
Name: "sync_oci_repo",
13+
Help: "no of update received in given chart and version",
14+
ConstLabels: constLabels,
15+
},
16+
[]string{})
17+
18+
var SyncRepo = promauto.NewCounterVec(
19+
prometheus.CounterOpts{
20+
Name: "sync_repo",
21+
Help: "no of update received in given chart and version",
22+
ConstLabels: constLabels,
23+
},
24+
[]string{})
25+
26+
var (
27+
httpDuration = promauto.NewHistogramVec(prometheus.HistogramOpts{
28+
Name: "http_duration_seconds",
29+
Help: "Duration of HTTP requests.",
30+
ConstLabels: constLabels,
31+
}, []string{"path", "method", "status"})
32+
)

chart-sync/pkg/SyncService.go

+6
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ func extractChartRepoRepositoryList(repositoryList string) []string {
134134
}
135135

136136
func (impl *SyncServiceImpl) syncOCIRepo(ociRepo *sql.DockerArtifactStore) error {
137+
// prometheus event for OCI registry sync
138+
internals.SyncOCIRepo.WithLabelValues().Inc()
139+
137140
applications, err := impl.appStoreRepository.FindByStoreId(ociRepo.Id)
138141
if err != nil {
139142
impl.logger.Errorw("error in fetching app for repo", "OCI registry", ociRepo.Id, "err", err)
@@ -258,6 +261,9 @@ func (impl *SyncServiceImpl) syncOCIRepo(ociRepo *sql.DockerArtifactStore) error
258261
}
259262

260263
func (impl *SyncServiceImpl) syncRepo(repo *sql.ChartRepo) error {
264+
// prometheus event for registry sync
265+
internals.SyncRepo.WithLabelValues().Inc()
266+
261267
indexFile, err := impl.helmRepoManager.LoadIndexFile(repo)
262268
if err != nil {
263269
impl.logger.Errorw("error in loading index file", "repo", repo.Name, "err", err)

chart-sync/wire_gen.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)