MetricConfig.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. namespace OhmGraphite
  3. {
  4. public class MetricConfig
  5. {
  6. public MetricConfig(TimeSpan interval, GraphiteConfig graphite, InfluxConfig influx, PrometheusConfig prometheus)
  7. {
  8. Interval = interval;
  9. Graphite = graphite;
  10. Influx = influx;
  11. Prometheus = prometheus;
  12. }
  13. public TimeSpan Interval { get; }
  14. public GraphiteConfig Graphite { get; }
  15. public InfluxConfig Influx { get; }
  16. public PrometheusConfig Prometheus { get; }
  17. public static MetricConfig ParseAppSettings(IAppConfig config)
  18. {
  19. if (!int.TryParse(config["interval"], out int seconds))
  20. {
  21. seconds = 5;
  22. }
  23. var interval = TimeSpan.FromSeconds(seconds);
  24. var type = config["type"] ?? "graphite";
  25. GraphiteConfig gconfig = null;
  26. InfluxConfig iconfig = null;
  27. PrometheusConfig pconfig = null;
  28. switch (type.ToLowerInvariant())
  29. {
  30. case "graphite":
  31. gconfig = GraphiteConfig.ParseAppSettings(config);
  32. break;
  33. case "influxdb":
  34. case "influx":
  35. iconfig = InfluxConfig.ParseAppSettings(config);
  36. break;
  37. case "prometheus":
  38. pconfig = PrometheusConfig.ParseAppSettings(config);
  39. break;
  40. }
  41. return new MetricConfig(interval, gconfig, iconfig, pconfig);
  42. }
  43. }
  44. }