Implement telegraf's own full metric type

main reasons behind this:
- make adding/removing tags cheap
- make adding/removing fields cheap
- make parsing cheaper
- make parse -> decorate -> write out bytes metric flow much faster

Refactor serializer to use byte buffer
This commit is contained in:
Cameron Sparr
2016-11-22 12:51:57 +00:00
parent 332f678afb
commit db7a4b24b6
40 changed files with 1376 additions and 398 deletions

View File

@@ -13,6 +13,7 @@ import (
"github.com/vjeantet/grok"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/metric"
)
var timeLayouts = map[string]string{
@@ -280,7 +281,7 @@ func (p *Parser) ParseLine(line string) (telegraf.Metric, error) {
}
}
return telegraf.NewMetric(p.Measurement, tags, fields, p.tsModder.tsMod(timestamp))
return metric.New(p.Measurement, tags, fields, p.tsModder.tsMod(timestamp))
}
func (p *Parser) addCustomPatterns(scanner *bufio.Scanner) {

View File

@@ -14,6 +14,7 @@ import (
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/metric"
"github.com/matttproud/golang_protobuf_extensions/pbutil"
dto "github.com/prometheus/client_model/go"
@@ -85,7 +86,7 @@ func Parse(buf []byte, header http.Header) ([]telegraf.Metric, error) {
} else {
t = time.Now()
}
metric, err := telegraf.NewMetric(metricName, tags, fields, t)
metric, err := metric.New(metricName, tags, fields, t)
if err == nil {
metrics = append(metrics, metric)
}

View File

@@ -6,6 +6,7 @@ import (
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/metric"
)
const meas = "github_webhooks"
@@ -106,7 +107,7 @@ func (s CommitCommentEvent) NewMetric() telegraf.Metric {
"commit": s.Comment.Commit,
"comment": s.Comment.Body,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -136,7 +137,7 @@ func (s CreateEvent) NewMetric() telegraf.Metric {
"ref": s.Ref,
"refType": s.RefType,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -166,7 +167,7 @@ func (s DeleteEvent) NewMetric() telegraf.Metric {
"ref": s.Ref,
"refType": s.RefType,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -197,7 +198,7 @@ func (s DeploymentEvent) NewMetric() telegraf.Metric {
"environment": s.Deployment.Environment,
"description": s.Deployment.Description,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -231,7 +232,7 @@ func (s DeploymentStatusEvent) NewMetric() telegraf.Metric {
"depState": s.DeploymentStatus.State,
"depDescription": s.DeploymentStatus.Description,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -259,7 +260,7 @@ func (s ForkEvent) NewMetric() telegraf.Metric {
"issues": s.Repository.Issues,
"fork": s.Forkee.Repository,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -287,7 +288,7 @@ func (s GollumEvent) NewMetric() telegraf.Metric {
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -319,7 +320,7 @@ func (s IssueCommentEvent) NewMetric() telegraf.Metric {
"comments": s.Issue.Comments,
"body": s.Comment.Body,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -351,7 +352,7 @@ func (s IssuesEvent) NewMetric() telegraf.Metric {
"title": s.Issue.Title,
"comments": s.Issue.Comments,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -380,7 +381,7 @@ func (s MemberEvent) NewMetric() telegraf.Metric {
"newMember": s.Member.User,
"newMemberStatus": s.Member.Admin,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -406,7 +407,7 @@ func (s MembershipEvent) NewMetric() telegraf.Metric {
"newMember": s.Member.User,
"newMemberStatus": s.Member.Admin,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -432,7 +433,7 @@ func (s PageBuildEvent) NewMetric() telegraf.Metric {
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -458,7 +459,7 @@ func (s PublicEvent) NewMetric() telegraf.Metric {
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -495,7 +496,7 @@ func (s PullRequestEvent) NewMetric() telegraf.Metric {
"deletions": s.PullRequest.Deletions,
"changedFiles": s.PullRequest.ChangedFiles,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -533,7 +534,7 @@ func (s PullRequestReviewCommentEvent) NewMetric() telegraf.Metric {
"commentFile": s.Comment.File,
"comment": s.Comment.Comment,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -565,7 +566,7 @@ func (s PushEvent) NewMetric() telegraf.Metric {
"before": s.Before,
"after": s.After,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -593,7 +594,7 @@ func (s ReleaseEvent) NewMetric() telegraf.Metric {
"issues": s.Repository.Issues,
"tagName": s.Release.TagName,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -619,7 +620,7 @@ func (s RepositoryEvent) NewMetric() telegraf.Metric {
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -649,7 +650,7 @@ func (s StatusEvent) NewMetric() telegraf.Metric {
"commit": s.Commit,
"state": s.State,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -677,7 +678,7 @@ func (s TeamAddEvent) NewMetric() telegraf.Metric {
"issues": s.Repository.Issues,
"teamName": s.Team.Name,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}
@@ -703,7 +704,7 @@ func (s WatchEvent) NewMetric() telegraf.Metric {
"forks": s.Repository.Forks,
"issues": s.Repository.Issues,
}
m, err := telegraf.NewMetric(meas, t, f, time.Now())
m, err := metric.New(meas, t, f, time.Now())
if err != nil {
log.Fatalf("Failed to create %v event", event)
}