256 lines
6.8 KiB
Go
256 lines
6.8 KiB
Go
|
package artifactory
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
"time"
|
||
|
|
||
|
"github.com/influxdata/telegraf"
|
||
|
"github.com/influxdata/telegraf/metric"
|
||
|
)
|
||
|
|
||
|
const meas = "artifactory_webhooks"
|
||
|
|
||
|
type event interface {
|
||
|
newMetric() telegraf.Metric
|
||
|
}
|
||
|
|
||
|
type artifactDeploymentOrDeletedEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Data struct {
|
||
|
Repo string `json:"repo_key"`
|
||
|
Path string `json:"path"`
|
||
|
Name string `json:"name"`
|
||
|
Size int64 `json:"size"`
|
||
|
Sha string `json:"sha256"`
|
||
|
} `json:"data"`
|
||
|
}
|
||
|
|
||
|
func (e artifactDeploymentOrDeletedEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"repo": e.Data.Repo,
|
||
|
"path": e.Data.Path,
|
||
|
"name": e.Data.Name,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"size": e.Data.Size,
|
||
|
"sha256": e.Data.Sha,
|
||
|
}
|
||
|
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type artifactMovedOrCopiedEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Data struct {
|
||
|
Repo string `json:"repo_key"`
|
||
|
Path string `json:"path"`
|
||
|
Name string `json:"name"`
|
||
|
Size int64 `json:"size"`
|
||
|
SourcePath string `json:"source_repo_path"`
|
||
|
TargetPath string `json:"target_repo_path"`
|
||
|
} `json:"data"`
|
||
|
}
|
||
|
|
||
|
func (e artifactMovedOrCopiedEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"repo": e.Data.Repo,
|
||
|
"path": e.Data.Path,
|
||
|
"name": e.Data.Name,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"size": e.Data.Size,
|
||
|
"source_path": e.Data.SourcePath,
|
||
|
"target_path": e.Data.TargetPath,
|
||
|
}
|
||
|
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type artifactPropertiesEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Data struct {
|
||
|
Repo string `json:"repo_key"`
|
||
|
Path string `json:"path"`
|
||
|
Name string `json:"name"`
|
||
|
Size int64 `json:"size"`
|
||
|
PropertyKey string `json:"property_key"`
|
||
|
PropertyValues []string `json:"property_values"`
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (e artifactPropertiesEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"repo": e.Data.Repo,
|
||
|
"path": e.Data.Path,
|
||
|
"name": e.Data.Name,
|
||
|
}
|
||
|
|
||
|
f := map[string]interface{}{
|
||
|
"property_key": e.Data.PropertyKey,
|
||
|
"property_values": strings.Join(e.Data.PropertyValues, ","),
|
||
|
}
|
||
|
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type dockerEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Data struct {
|
||
|
Repo string `json:"repo_key"`
|
||
|
Path string `json:"path"`
|
||
|
Name string `json:"name"`
|
||
|
Size int64 `json:"size"`
|
||
|
Sha string `json:"sha256"`
|
||
|
ImageName string `json:"image_name"`
|
||
|
Tag string `json:"tag"`
|
||
|
Platforms []struct {
|
||
|
Architecture string `json:"architecture"`
|
||
|
Os string `json:"os"`
|
||
|
} `json:"platforms"`
|
||
|
} `json:"data"`
|
||
|
}
|
||
|
|
||
|
func (e dockerEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"repo": e.Data.Repo,
|
||
|
"path": e.Data.Path,
|
||
|
"name": e.Data.Name,
|
||
|
"image_name": e.Data.ImageName,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"size": e.Data.Size,
|
||
|
"sha256": e.Data.Sha,
|
||
|
"tag": e.Data.Tag,
|
||
|
"platforms": e.Data.Platforms,
|
||
|
}
|
||
|
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type buildEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Data struct {
|
||
|
BuildName string `json:"build_name"`
|
||
|
BuildNumber string `json:"build_number"`
|
||
|
BuildStarted string `json:"build_started"`
|
||
|
} `json:"data"`
|
||
|
}
|
||
|
|
||
|
func (e buildEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"build_name": e.Data.BuildName,
|
||
|
"build_number": e.Data.BuildNumber,
|
||
|
"build_started": e.Data.BuildStarted,
|
||
|
}
|
||
|
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type releaseBundleEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Destination string `json:"destination"`
|
||
|
Data struct {
|
||
|
ReleaseBundleName string `json:"release_bundle_name"`
|
||
|
ReleaseBundleSize int64 `json:"release_bundle_size"`
|
||
|
ReleaseBundleVersion string `json:"release_bundle_version"`
|
||
|
} `json:"data"`
|
||
|
JpdOrigin string `json:"jpd_origin"`
|
||
|
}
|
||
|
|
||
|
func (e releaseBundleEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"destination": e.Destination,
|
||
|
"release_bundle_name": e.Data.ReleaseBundleName,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"release_bundle_size": e.Data.ReleaseBundleSize,
|
||
|
"release_bundle_version": e.Data.ReleaseBundleVersion,
|
||
|
"jpd_origin": e.JpdOrigin,
|
||
|
}
|
||
|
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type distributionEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Destination string `json:"destination"`
|
||
|
Data struct {
|
||
|
EdgeNodeInfoList []struct {
|
||
|
EdgeNodeAddress string `json:"edge_node_address"`
|
||
|
EdgeNodeName string `json:"edge_node_name"`
|
||
|
} `json:"edge_node_info_list"`
|
||
|
Name string `json:"release_bundle_name"`
|
||
|
Size int64 `json:"release_bundle_size"`
|
||
|
Version string `json:"release_bundle_version"`
|
||
|
Message string `json:"status_message"`
|
||
|
TransactionID int64 `json:"transaction_id"`
|
||
|
} `json:"data"`
|
||
|
OriginURL string `json:"jpd_origin"`
|
||
|
}
|
||
|
|
||
|
func (e distributionEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"destination": e.Destination,
|
||
|
"release_bundle_name": e.Data.Name,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"release_bundle_size": e.Data.Size,
|
||
|
"release_bundle_version": e.Data.Version,
|
||
|
"status_message": e.Data.Message,
|
||
|
"transaction_id": e.Data.TransactionID,
|
||
|
"edge_node_info_list": e.Data.EdgeNodeInfoList,
|
||
|
"jpd_origin": e.OriginURL,
|
||
|
}
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|
||
|
|
||
|
type destinationEvent struct {
|
||
|
Domain string `json:"domain"`
|
||
|
Event string `json:"event_type"`
|
||
|
Destination string `json:"destination"`
|
||
|
Data struct {
|
||
|
Name string `json:"release_bundle_name"`
|
||
|
Version string `json:"release_bundle_version"`
|
||
|
Message string `json:"status_message"`
|
||
|
} `json:"data"`
|
||
|
OriginURL string `json:"jpd_origin"`
|
||
|
}
|
||
|
|
||
|
func (e destinationEvent) newMetric() telegraf.Metric {
|
||
|
t := map[string]string{
|
||
|
"domain": e.Domain,
|
||
|
"event_type": e.Event,
|
||
|
"destination": e.Destination,
|
||
|
"release_bundle_name": e.Data.Name,
|
||
|
}
|
||
|
f := map[string]interface{}{
|
||
|
"release_bundle_version": e.Data.Version,
|
||
|
"status_message": e.Data.Message,
|
||
|
"jpd_origin": e.OriginURL,
|
||
|
}
|
||
|
return metric.New(meas, t, f, time.Now())
|
||
|
}
|