apiVersion: v1
kind: ConfigMap
metadata:
  name: telegraf
data:
  # Configuration for
  # mqtt consumer to influx db sink
  telegraf.conf: |
    # Telegraf Configuration
    #
    # Telegraf is entirely plugin driven. All metrics are gathered from the
    # declared inputs, and sent to the declared outputs.
    #
    # Plugins must be declared in here to be active.
    # To deactivate a plugin, comment out the name and any variables.
    #
    # Use 'telegraf -config telegraf.conf -test' to see what metrics a config
    # file would generate.
    #
    # Environment variables can be used anywhere in this config file, simply surround
    # them with ${}. For strings the variable must be within quotes (ie, "${STR_VAR}"),
    # for numbers and booleans they should be plain (ie, ${INT_VAR}, ${BOOL_VAR})


    # Global tags can be specified here in key="value" format.
    [global_tags]
      # dc = "us-east-1" # will tag all metrics with dc=us-east-1
      # rack = "1a"
      ## Environment variables can be used as tags, and throughout the config file
      # user = "$USER"


    # Configuration for telegraf agent
    [agent]
      ## Default data collection interval for all inputs
      interval = "1s"
      ## Rounds collection interval to 'interval'
      ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
      round_interval = true

      ## Telegraf will send metrics to outputs in batches of at most
      ## metric_batch_size metrics.
      ## This controls the size of writes that Telegraf sends to output plugins.
      metric_batch_size = 1000

      ## Maximum number of unwritten metrics per output.  Increasing this value
      ## allows for longer periods of output downtime without dropping metrics at the
      ## cost of higher maximum memory usage.
      metric_buffer_limit = 10000

      ## Collection jitter is used to jitter the collection by a random amount.
      ## Each plugin will sleep for a random time within jitter before collecting.
      ## This can be used to avoid many plugins querying things like sysfs at the
      ## same time, which can have a measurable effect on the system.
      collection_jitter = "0s"

      ## Default flushing interval for all outputs. Maximum flush_interval will be
      ## flush_interval + flush_jitter
      flush_interval = "10s"
      ## Jitter the flush interval by a random amount. This is primarily to avoid
      ## large write spikes for users running a large number of telegraf instances.
      ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
      flush_jitter = "0s"

      ## By default or when set to "0s", precision will be set to the same
      ## timestamp order as the collection interval, with the maximum being 1s.
      ##   ie, when interval = "10s", precision will be "1s"
      ##       when interval = "250ms", precision will be "1ms"
      ## Precision will NOT be used for service inputs. It is up to each individual
      ## service input to set the timestamp at the appropriate precision.
      ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
      precision = ""

      ## Log at debug level.
      debug = false
      ## Log only error level messages.
      # quiet = false

      ## Log target controls the destination for logs and can be one of "file",
      ## "stderr" or, on Windows, "eventlog".  When set to "file", the output file
      ## is determined by the "logfile" setting.
      # logtarget = "file"

      ## Name of the file to be logged to when using the "file" logtarget.  If set to
      ## the empty string then logs are written to stderr.
      # logfile = ""

      ## The logfile will be rotated after the time interval specified.  When set
      ## to 0 no time based rotation is performed.  Logs are rotated only when
      ## written to, if there is no log activity rotation may be delayed.
      # logfile_rotation_interval = "0d"

      ## The logfile will be rotated when it becomes larger than the specified
      ## size.  When set to 0 no size based rotation is performed.
      # logfile_rotation_max_size = "0MB"

      ## Maximum number of rotated archives to keep, any older logs are deleted.
      ## If set to -1, no archives are removed.
      # logfile_rotation_max_archives = 5

      ## Override default hostname, if empty use os.Hostname()
      hostname = ""
      ## If set to true, do no set the "host" tag in the telegraf agent.
      omit_hostname = false


    ###############################################################################
    #                            OUTPUT PLUGINS                                   #
    ###############################################################################


    # Configuration for sending metrics to InfluxDB
    [[outputs.influxdb]]
      ## The full HTTP or UDP URL for your InfluxDB instance.
      ##
      ## Multiple URLs can be specified for a single cluster, only ONE of the
      ## urls will be written to each interval.
      # urls = ["unix:///var/run/influxdb.sock"]
      # urls = ["udp://127.0.0.1:8089"]
      urls = ["http://influxdb:8086"]

      ## The target database for metrics; will be created as needed.
      ## For UDP url endpoint database needs to be configured on server side.
      database = "plant_keeper"

      ## The value of this tag will be used to determine the database.  If this
      ## tag is not set the 'database' option is used as the default.
      # database_tag = ""

      ## If true, the 'database_tag' will not be included in the written metric.
      # exclude_database_tag = false

      ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
      ## Telegraf with a user without permissions to create databases or when the
      ## database already exists.
      skip_database_creation = false

      ## Name of existing retention policy to write to.  Empty string writes to
      ## the default retention policy.  Only takes effect when using HTTP.
      # retention_policy = ""

      ## The value of this tag will be used to determine the retention policy.  If this
      ## tag is not set the 'retention_policy' option is used as the default.
      # retention_policy_tag = ""

      ## If true, the 'retention_policy_tag' will not be included in the written metric.
      # exclude_retention_policy_tag = false

      ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
      ## Only takes effect when using HTTP.
      # write_consistency = "any"

      ## Timeout for HTTP messages.
      # timeout = "5s"

      ## HTTP Basic Auth
      username = "admin"
      password = "supersecretpassword"

      ## HTTP User-Agent
      # user_agent = "telegraf"

      ## UDP payload size is the maximum packet size to send.
      # udp_payload = "512B"

      ## Optional TLS Config for use on HTTP connections.
      # tls_ca = "/etc/telegraf/ca.pem"
      # tls_cert = "/etc/telegraf/cert.pem"
      # tls_key = "/etc/telegraf/key.pem"
      ## Use TLS but skip chain & host verification
      # insecure_skip_verify = false

      ## HTTP Proxy override, if unset values the standard proxy environment
      ## variables are consulted to determine which proxy, if any, should be used.
      # http_proxy = "http://corporate.proxy:3128"

      ## Additional HTTP headers
      # http_headers = {"X-Special-Header" = "Special-Value"}

      ## HTTP Content-Encoding for write request body, can be set to "gzip" to
      ## compress body or "identity" to apply no encoding.
      # content_encoding = "identity"

      ## When true, Telegraf will output unsigned integers as unsigned values,
      ## i.e.: "42u".  You will need a version of InfluxDB supporting unsigned
      ## integer values.  Enabling this option will result in field type errors if
      ## existing data has been written.
      # influx_uint_support = false

    # # Read metrics from MQTT topic(s)
    [[inputs.mqtt_consumer]]
    #   ## Broker URLs for the MQTT server or cluster.  To connect to multiple
    #   ## clusters or standalone servers, use a seperate plugin instance.
    #   ##   example: servers = ["tcp://localhost:1883"]
    #   ##            servers = ["ssl://localhost:1883"]
    #   ##            servers = ["ws://localhost:1883"]
       servers = ["tcp://mqtt:1883"]
    #
    #   ## Topics that will be subscribed to.
       topics = [
                  "water/sensor",
                  "water/controller/telegraf",
                  "sprinkler/sensor",
                  "sprinkler/controller/telegraf",
                  "cooler/sensor",
                  "cooler/controller/telegraf",
                  "heater/sensor",
                  "heater/controller/telegraf",
                  "air_humidifier/sensor",
                  "air_humidifier/controller/telegraf"
                ]
    #
    #   ## The message topic will be stored in a tag specified by this value.  If set
    #   ## to the empty string no topic tag will be created.
    #   # topic_tag = "topic"
    #
    #   ## QoS policy for messages
    #   ##   0 = at most once
    #   ##   1 = at least once
    #   ##   2 = exactly once
    #   ##
    #   ## When using a QoS of 1 or 2, you should enable persistent_session to allow
    #   ## resuming unacknowledged messages.
        qos = 0
    #
    #   ## Connection timeout for initial connection in seconds
    #   # connection_timeout = "30s"
    #
    #   ## Maximum messages to read from the broker that have not been written by an
    #   ## output.  For best throughput set based on the number of metrics within
    #   ## each message and the size of the output's metric_batch_size.
    #   ##
    #   ## For example, if each message from the queue contains 10 metrics and the
    #   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
    #   ## full batch is collected and the write is triggered immediately without
    #   ## waiting until the next flush_interval.
    #   # max_undelivered_messages = 1000
    #
    #   ## Persistent session disables clearing of the client session on connection.
    #   ## In order for this option to work you must also set client_id to identify
    #   ## the client.  To receive messages that arrived while the client is offline,
    #   ## also set the qos option to 1 or 2 and don't forget to also set the QoS when
    #   ## publishing.
    #   # persistent_session = false
    #
    #   ## If unset, a random client ID will be generated.
    #   # client_id = ""
    #
    #   ## Username and password to connect MQTT server.
       username = "admin"
       password = "admin"
    #
    #   ## Optional TLS Config
    #   # tls_ca = "/etc/telegraf/ca.pem"
    #   # tls_cert = "/etc/telegraf/cert.pem"
    #   # tls_key = "/etc/telegraf/key.pem"
    #   ## Use TLS but skip chain & host verification
    #   # insecure_skip_verify = false
    #
    #   ## Data format to consume.
    #   ## Each data format has its own unique set of configuration options, read
    #   ## more about them here:
    #   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
       data_format = "influx"

    # # Read metrics from MQTT topic(s)
    [[inputs.mqtt_consumer]]
    #   ## Broker URLs for the MQTT server or cluster.  To connect to multiple
    #   ## clusters or standalone servers, use a seperate plugin instance.
    #   ##   example: servers = ["tcp://localhost:1883"]
    #   ##            servers = ["ssl://localhost:1883"]
    #   ##            servers = ["ws://localhost:1883"]
       name_override = "controllers"
       servers = ["tcp://mqtt:1883"]

    #
    #   ## Topics that will be subscribed to.
       topics = [
                  "water/controller",
                  "sprinkler/controller",
                  "cooler/controller",
                  "heater/controller",
                  "air_humidifier/controller"
                ]
    #
    #   ## The message topic will be stored in a tag specified by this value.  If set
    #   ## to the empty string no topic tag will be created.
    #   # topic_tag = "topic"
    #
    #   ## QoS policy for messages
    #   ##   0 = at most once
    #   ##   1 = at least once
    #   ##   2 = exactly once
    #   ##
    #   ## When using a QoS of 1 or 2, you should enable persistent_session to allow
    #   ## resuming unacknowledged messages.
        qos = 0
    #
    #   ## Connection timeout for initial connection in seconds
    #   # connection_timeout = "30s"
    #
    #   ## Maximum messages to read from the broker that have not been written by an
    #   ## output.  For best throughput set based on the number of metrics within
    #   ## each message and the size of the output's metric_batch_size.
    #   ##
    #   ## For example, if each message from the queue contains 10 metrics and the
    #   ## output metric_batch_size is 1000, setting this to 100 will ensure that a
    #   ## full batch is collected and the write is triggered immediately without
    #   ## waiting until the next flush_interval.
    #   # max_undelivered_messages = 1000
    #
    #   ## Persistent session disables clearing of the client session on connection.
    #   ## In order for this option to work you must also set client_id to identify
    #   ## the client.  To receive messages that arrived while the client is offline,
    #   ## also set the qos option to 1 or 2 and don't forget to also set the QoS when
    #   ## publishing.
    #   # persistent_session = false
    #
    #   ## If unset, a random client ID will be generated.
    #   # client_id = ""
    #
    #   ## Username and password to connect MQTT server.
       username = "admin"
       password = "admin"
    #
    #   ## Optional TLS Config
    #   # tls_ca = "/etc/telegraf/ca.pem"
    #   # tls_cert = "/etc/telegraf/cert.pem"
    #   # tls_key = "/etc/telegraf/key.pem"
    #   ## Use TLS but skip chain & host verification
    #   # insecure_skip_verify = false
    #
    #   ## Data format to consume.
    #   ## Each data format has its own unique set of configuration options, read
    #   ## more about them here:
    #   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
       data_format = "json"
       tag_keys = [
        "controller_type",
        "tag"
        ]
