init project

This commit is contained in:
Ulric Qin 2022-04-13 12:36:01 +08:00
commit e8397d76d0
5 changed files with 154 additions and 0 deletions

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module flashcat.cloud/categraf
go 1.17

View File

@ -0,0 +1,37 @@
package common
import "time"
type IntervalDuration struct {
IntervalStr string // e.g. 1s 2s
IntervalDur time.Duration // e.g. 1s 2s
}
type TimeoutDuration struct {
TimeoutStr string // e.g. 1s 2s
TimeoutDur time.Duration // e.g. 1s 2s
}
func (d *IntervalDuration) Tidy() error {
if d.IntervalStr != "" {
val, err := time.ParseDuration(d.IntervalStr)
if err != nil {
return err
}
d.IntervalDur = val
}
return nil
}
func (d *TimeoutDuration) Tidy() error {
if d.TimeoutStr != "" {
val, err := time.ParseDuration(d.TimeoutStr)
if err != nil {
return err
}
d.TimeoutDur = val
}
return nil
}

View File

@ -0,0 +1,4 @@
package exec
type Config struct {
}

103
integrations/redis/redis.go Normal file
View File

@ -0,0 +1,103 @@
package redis
import (
"log"
"time"
"flashcat.cloud/categraf/integrations/common"
)
var (
DefaultInterval = time.Second * 30
DefaultTimeout = time.Second * 20
)
type Target struct {
common.IntervalDuration
common.TimeoutDuration
Address string
Password string
quit chan struct{}
Labels map[string]string
}
type Redis struct {
common.IntervalDuration
common.TimeoutDuration
Targets []*Target
Labels map[string]string
}
// overwrite func
func (r *Redis) Description() string {
return "Read metrics from one or many redis servers"
}
// overwrite func
func (r *Redis) TidyConfig() error {
if err := r.IntervalDuration.Tidy(); err != nil {
return err
}
if err := r.TimeoutDuration.Tidy(); err != nil {
return err
}
if len(r.Targets) == 0 {
log.Println("I! [redis] Targets is empty")
}
for i := 0; i < len(r.Targets); i++ {
if err := r.Targets[i].IntervalDuration.Tidy(); err != nil {
return err
}
if err := r.Targets[i].TimeoutDuration.Tidy(); err != nil {
return err
}
}
return nil
}
// overwrite func
func (r *Redis) StopGoroutines() {
for i := 0; i < len(r.Targets); i++ {
close(r.Targets[i].quit)
}
}
// overwrite func
func (r *Redis) StartGoroutines() {
for i := 0; i < len(r.Targets); i++ {
r.Targets[i].quit = make(chan struct{})
go r.Targets[i].LoopGather(r)
}
}
func (t *Target) getInterval(r *Redis) time.Duration {
if t.IntervalDur != 0 {
return r.IntervalDur
}
if r.IntervalDur != 0 {
return r.IntervalDur
}
return DefaultInterval
}
func (t *Target) LoopGather(r *Redis) {
for {
select {
case <-t.quit:
return
default:
time.Sleep(t.getInterval(r))
t.Gather(r)
}
}
}
func (t *Target) Gather(r *Redis) {
}

7
main.go Normal file
View File

@ -0,0 +1,7 @@
package main
import "fmt"
func main() {
fmt.Println("hello")
}