Skip to content

Support other formats for metric dimensions #13

@Firehed

Description

@Firehed

At present, the use of metrics dimensions results in some metrics being emitted in an unexpected way:

Timer(label: "my_event", dimensions: [("foo", "bar")]).recordNanoseconds(someDuration)

will emit a packet roughly like

my_event.foo.bar:123.45|ms

However, using the tag format for dimensions would be more appropriate in many applications:

my_event:123.45|ms#foo:bar

Unfortunately, there's not a standard syntax for tags (see statsd/statsd#619), but I think this could be addressed by having an optional init parameter to specify the format:

enum DimensionFormat {
  case datadog
  case influxdb
  case inline
  // ..
}

class StatsdClient: MetricsFactory {
  public init(eventLoopGroupProvider: EventLoopGroupProvider = .createNew, host: String, port: Int, format: DimensionFormat = .inline) throws {
    // ...
  }
  // ...
}

// User initialization code
let statsdClient = try StatsdClient(host: statsdHost, port: statsdPort, format: .datadog)
MetricsSystem.bootstrap(statsdClient)

It may be preferable to avoid specific vendor names in the enum cases to avoid any sort of endorsement, but I'm confident that could be addressed.

Thoughts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions