82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package dockerhub
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/influxdata/telegraf"
|
|
)
|
|
|
|
const meas = "dockerhub"
|
|
|
|
type Event interface {
|
|
NewMetric() telegraf.Metric
|
|
}
|
|
|
|
type PushData struct {
|
|
Images []string `json:"images"`
|
|
PushedAt int64 `json:"pushed_at"`
|
|
Pusher string `json:"pusher"`
|
|
Tag string `json:"tag"`
|
|
}
|
|
|
|
type Repository struct {
|
|
CommentCount int `json:"comment_count"`
|
|
DateCreated int64 `json:"date_created"`
|
|
Description string `json:"description"`
|
|
Dockerfile string `json:"dockerfile"`
|
|
FullDescription string `json:"full_description"`
|
|
IsOfficial bool `json:"is__official"`
|
|
IsPrivate bool `json:"is_private"`
|
|
IsTrusted bool `json:"is_trusted"`
|
|
Name string `json:"name"`
|
|
Namespace string `json:"namespace"`
|
|
Owner string `json:"owner"`
|
|
RepoName string `json:"repo_name"`
|
|
RepoURL string `json:"repo_url"`
|
|
StarCount int `json:"star_count"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
type DockerhubEvent struct {
|
|
CallbackURL string `json:"callback_url"`
|
|
PushData PushData `json:"push_data"`
|
|
Repository Repository `json:"repository"`
|
|
}
|
|
|
|
func (dhe DockerhubEvent) String() string {
|
|
return fmt.Sprintf(`{
|
|
callback_url: %v
|
|
}`,
|
|
dhe.CallbackURL)
|
|
}
|
|
|
|
func (dhe DockerhubEvent) NewMetric() telegraf.Metric {
|
|
tags := map[string]string{
|
|
"description": dhe.Repository.Description,
|
|
"name": dhe.Repository.Name,
|
|
"namespace": dhe.Repository.Namespace,
|
|
"owner": dhe.Repository.Owner,
|
|
"pusher": dhe.PushData.Pusher,
|
|
"repo_name": dhe.Repository.RepoName,
|
|
"repo_url": dhe.Repository.RepoURL,
|
|
"status": dhe.Repository.Status,
|
|
"tag": dhe.PushData.Tag,
|
|
}
|
|
fields := map[string]interface{}{
|
|
"comment_count": dhe.Repository.CommentCount,
|
|
"date_created": dhe.Repository.DateCreated,
|
|
"is_official": dhe.Repository.IsOfficial,
|
|
"is_private": dhe.Repository.IsPrivate,
|
|
"is_trusted": dhe.Repository.IsTrusted,
|
|
"pushed_at": dhe.PushData.PushedAt,
|
|
"star_count": dhe.Repository.StarCount,
|
|
}
|
|
metric, err := telegraf.NewMetric(meas, tags, fields, time.Unix(dhe.PushData.PushedAt, 0))
|
|
if err != nil {
|
|
log.Fatalf("Failed to create %v event", meas)
|
|
}
|
|
return metric
|
|
}
|