Skip to content
This repository has been archived by the owner on May 20, 2024. It is now read-only.

Commit

Permalink
ADD OVH Metrics && ADD Go metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
azrod committed Jan 6, 2022
1 parent 79ec4c7 commit 65a464a
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 23 deletions.
42 changes: 29 additions & 13 deletions docs/advanced/metrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,22 +47,38 @@ METRICS_ENABLE=true ./updateip

### Global

| Metrics Name | Description |
| ---------------------------- | -------------------- |
| updateip_count_event_receive | Total event received |
| Metrics Name | Description |
| ---------------------- | ------------------------------------------ |
| go_build_info | Build information about the main Go module |
| go_gc_duration_seconds | Go garbage collection duration |
| go_goroutines | Number of goroutines |
| go_info | Go runtime information |
| go_memstats_* | Go runtime memory statistics |
| go_threads | Number of threads |

### AWS Provider

| Metrics Name | Description |
| ---------------------- | ------------------------------------ |
| updateip_aws_func_time | Execution time of each function |
| updateip_aws_status | Return Status of AWS Provider |
| updateip_aws_update | Number of DNS record validity checks |
| Metrics Name | Description |
| -------------------------- | ------------------------------------ |
| updateip_aws_func_time | Execution time of each function |
| updateip_aws_status | Return Status of AWS Provider |
| updateip_aws_update | Number of DNS record validity checks |
| updateip_aws_event_receive | Count of events received |

### Cloudflare Provider

| Metrics Name | Description |
| ----------------------------- | ------------------------------------ |
| updateip_cloudflare_func_time | Execution time of each function |
| updateip_cloudflare_status | Return Status of Cloudflare Provider |
| updateip_cloudflare_update | Number of DNS record validity checks |
| Metrics Name | Description |
| --------------------------------- | ------------------------------------ |
| updateip_cloudflare_func_time | Execution time of each function |
| updateip_cloudflare_status | Return Status of Cloudflare Provider |
| updateip_cloudflare_update | Number of DNS record validity checks |
| updateip_cloudflare_event_receive | Count of events received |

### OVH Provider

| Metrics Name | Description |
| -------------------------- | ------------------------------------ |
| updateip_ovh_func_time | Execution time of each function |
| updateip_ovh_status | Return Status of OVH Provider |
| updateip_ovh_update | Number of DNS record validity checks |
| updateip_ovh_event_receive | Count of events received |
7 changes: 4 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@ func main() {
m.RegisterPkg(PCloudflare.RegistryMetrics())
}

if c.Providers.OVHAccount.Enable {
m.RegisterPkg(PCloudflare.RegistryMetrics())
}

m.Run()
}

Expand All @@ -126,9 +130,6 @@ LOOP:
for {
select {
case sig := <-sigs:
if c.Metrics.Enable {
(*m.Counters)["eventReceive"].Inc()
}
log.Info().Msg(sig.String())
break LOOP
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ func (m *Metrics) RegisterPkg(rg map[string][]interface{}) {
for _, v := range rg["gaugeVec"] {
m.registry.MustRegister(v.(*prometheus.HistogramVec))
}

m.registry.MustRegister(collectors.NewGoCollector())
}

func (m *Metrics) hTTPServer() {
Expand Down
3 changes: 2 additions & 1 deletion pkg/providers/aws/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,8 @@ func (d *Paws) Run() error {
for {
select {
case e := <-d.Events:
log.Info().Msgf("Event: %s", e)
eventReceive.Inc()
log.Info().Msgf("Event => %s", e)
case <-d.Loop.C:

if ok, err := d.GetChangeStatus(); ok && err == nil {
Expand Down
9 changes: 8 additions & 1 deletion pkg/providers/aws/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,19 @@ var (
},
[]string{"where"},
)

eventReceive = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "updateip_aws_event_receive",
Help: "Count of events received on AWS Provider.",
},
)
)

func (d *Paws) RegistryMetrics() map[string][]interface{} {

x := make(map[string][]interface{})
x["counter"] = []interface{}{countUpdate}
x["counter"] = []interface{}{countUpdate, eventReceive}
x["gauge"] = []interface{}{providerStatus}
x["gaugeVec"] = []interface{}{funcTime}

Expand Down
3 changes: 2 additions & 1 deletion pkg/providers/cloudflare/cloudflare.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@ func (d *PCloudflare) Run() error {
for {
select {
case e := <-d.Events:
log.Info().Msgf("Event: => %s", e)
eventReceive.Inc()
log.Info().Msgf("Event => %s", e)
case <-d.Loop.C:

r, err := d.GetRecord()
Expand Down
7 changes: 7 additions & 0 deletions pkg/providers/cloudflare/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ var (
},
[]string{"where"},
)

eventReceive = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "updateip_cloudflare_event_receive",
Help: "Count of events received on Cloudflare.",
},
)
)

func (d *PCloudflare) RegistryMetrics() map[string][]interface{} {
Expand Down
55 changes: 55 additions & 0 deletions pkg/providers/ovh/metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package uip_ovh

import (
"time"

"github.com/prometheus/client_golang/prometheus"
)

var (
countUpdate = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "updateip_ovh_update",
Help: "Number of ip updated on OVH provider.",
},
)

// Status ...
providerStatus = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "updateip_ovh_status",
Help: "cloudflare Providers status.",
},
)

// Histo ...
funcTime = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "updateip_ovh_func_time",
Help: "Time taken to do ...",
},
[]string{"where"},
)

eventReceive = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "updateip_ovh_event_receive",
Help: "Count of events received on OVH Provider.",
},
)
)

func (d *Povh) RegistryMetrics() map[string][]interface{} {

x := make(map[string][]interface{})
x["counter"] = []interface{}{countUpdate}
x["gauge"] = []interface{}{providerStatus}
x["gaugeVec"] = []interface{}{funcTime}

return x
}

// TimeTrackS ...
func timeTrackS(start time.Time, name string) {
elapsed := time.Since(start)
funcTime.WithLabelValues(name).Observe(elapsed.Seconds())
}
13 changes: 9 additions & 4 deletions pkg/providers/ovh/ovh.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import (

// New Client
func (d *Povh) NewClient() (err error) {
defer timeTrackS(time.Now(), "ovh_NewClient")

d.clients.ovh, err = ovh.NewClient(
d.Secret.Region,
d.Secret.ApplicationKey,
Expand All @@ -32,6 +34,7 @@ func (d *Povh) NewClient() (err error) {

// update record
func (d *Povh) UpdateRecord(recordID int, ip net.IP) (err error) {
defer timeTrackS(time.Now(), "ovh_UpdateRecord")
var respData txtRecordResponse
reqData := txtRecordRequest{FieldType: "A", Target: ip.String(), TTL: 300}

Expand All @@ -53,7 +56,7 @@ func (d *Povh) UpdateRecord(recordID int, ip net.IP) (err error) {

// get record ID
func (d *Povh) GetRecordID() (recordID int, err error) {

defer timeTrackS(time.Now(), "ovh_GetRecordID")
var records []int
err = d.clients.ovh.Get(
"/domain/zone/"+d.Record.Zone+"/record?fieldType=TXT&subDomain="+d.Record.Name,
Expand Down Expand Up @@ -91,7 +94,7 @@ func (d *Povh) GetRecordID() (recordID int, err error) {

// get record with record ID
func (d *Povh) GetRecord(recordID int) (record string, err error) {

defer timeTrackS(time.Now(), "ovh_GetRecord")
var respData txtRecordResponse
err = d.clients.ovh.Get(
"/domain/zone/"+d.Record.Zone+"/record/"+fmt.Sprint(recordID),
Expand All @@ -108,13 +111,15 @@ func (d *Povh) GetRecord(recordID int) (record string, err error) {

// GetchangeStatus returns the status of the change
func (d *Povh) GetChangeStatus() (status bool, err error) {
defer timeTrackS(time.Now(), "ovh_GetChangeStatus")
var respData StatusResponse
err = d.clients.ovh.Get("/domain/zone/"+d.Record.Zone+"/status", respData)
return respData.IsDeployed, err
}

// Refresh Zone Records
func (d *Povh) RefreshZoneRecords() (err error) {
defer timeTrackS(time.Now(), "ovh_RefreshZoneRecords")
var respData []int
err = d.clients.ovh.Post(
"/domain/zone/"+d.Record.Zone+"/refresh",
Expand Down Expand Up @@ -150,7 +155,8 @@ func (d *Povh) Run() (err error) {
for {
select {
case e := <-d.Events:
log.Info().Msgf("Event: %s", e)
eventReceive.Inc()
log.Info().Msgf("Event => %s", e)
case <-d.Loop.C:

if ok, err := d.GetChangeStatus(); ok && err == nil {
Expand All @@ -172,7 +178,6 @@ func (d *Povh) Run() (err error) {
}

if r != i.String() {
// go lock()
log.Info().Str("DNSIP", r).Str("ActualIP", i.String()).Msg("New IP address detected. Update")
if err = d.UpdateRecord(recordID, i); err != nil {
log.Error().Err(err).Msg("Failed to update dns record")
Expand Down

0 comments on commit 65a464a

Please sign in to comment.