37d39de36d
* Storage server runs own instrumentation server if its the sole target. Starts adding some sample metrics for now. * adds metric for failed optimistic locks * refactors metrics registration to own method on service for testability. Adds tests. * Register sql storage server metrics from within the service * fixes test * troubleshooting drone test failures. Maybe timing when starting instrumentation server? * Waits until instrumentation server has started. Updates tests. * defer wont get called unless theres an error. removing. * wait for instrumentation server to be running * linter - close res body * use port 3000 for metrics and removes test metric inc() call * fixes test - updates port * refactors module server to provide an instrumentation server module when there is no ALL or CORE target provided and running as single target * make instrumentation server a dependency of all modules that do not run their own http server * adds module server test * adds tests for instrumentation service and removes old tests that aren't needed * ignore error in test * uses helper to start and run service * when running wait on ctx done or http server err * wait for http server * removes println * updates module server test to be integration test * require no error in goroutine * skips integration test when GRAFANA_TEST_DB not defined * move http server start into start, verify returned content * make test error when run fails * try waiting longer and see if drone tests pass * update integration test mysql creds to match drone * go back to only waiting half second * debug log drone mysql connection string * use same db connection config as drone * try using same hostname as drone * cant use localhost as mysql hostname in drone tests. Need to parse it from the cfg db connection string --------- Co-authored-by: Dan Cech <dcech@grafana.com>
42 lines
857 B
Go
42 lines
857 B
Go
package sqlstash
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
var (
|
|
once sync.Once
|
|
StorageServerMetrics *StorageApiMetrics
|
|
)
|
|
|
|
type StorageApiMetrics struct {
|
|
OptimisticLockFailed *prometheus.CounterVec
|
|
}
|
|
|
|
func NewStorageMetrics() *StorageApiMetrics {
|
|
once.Do(func() {
|
|
StorageServerMetrics = &StorageApiMetrics{
|
|
OptimisticLockFailed: prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Namespace: "storage_server",
|
|
Name: "optimistic_lock_failed",
|
|
Help: "count of optimistic locks failed",
|
|
},
|
|
[]string{"action"},
|
|
),
|
|
}
|
|
})
|
|
|
|
return StorageServerMetrics
|
|
}
|
|
|
|
func (s *StorageApiMetrics) Collect(ch chan<- prometheus.Metric) {
|
|
s.OptimisticLockFailed.Collect(ch)
|
|
}
|
|
|
|
func (s *StorageApiMetrics) Describe(ch chan<- *prometheus.Desc) {
|
|
s.OptimisticLockFailed.Describe(ch)
|
|
}
|