apiVersion: v1

kind: ConfigMap
metadata:
  name: telegraf-config
data:
  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 prepend
    # 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]

    # Configuration for telegraf agent
    [agent]
      ## Default data collection interval for all inputs
      interval = "30s"
      ## 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 = 200

      ## For failed writes, telegraf will cache metric_buffer_limit metrics for each
      ## output, and will flush this buffer on a successful write. Oldest metrics
      ## are dropped first when this buffer fills.
      ## This buffer only fills when writes fail to output plugin(s).
      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 = "30s"
      ## 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 = ""

      ## Logging configuration:
      ## Run telegraf with debug log messages.
      debug = false
      ## Run telegraf in quiet mode (error log messages only).
      quiet = false
      ## Specify the log file name. The empty string means to log to stderr.
      logfile = ""

      ## 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 = true


    ###############################################################################
    #                            OUTPUT PLUGINS                                   #
    ###############################################################################
    [[outputs.prometheus_client]]
      ## Address to listen on.
      listen = ":9273"
    ###############################################################################
    #                            INPUT PLUGINS                                    #
    ###############################################################################
    [[inputs.sql]]
      driver = "mysql"
      dsn = "${MYSQL_USER}:${MYSQL_PASSWORD}@tcp(${MYSQL_HOST}:${MYSQL_PORT})/dreamkast"
    
      [[inputs.sql.query]]
        query="SELECT t.id,t.title,td.name AS talk_difficulty FROM talks t LEFT JOIN talk_difficulties td ON t.talk_difficulty_id = td.id WHERE t.conference_id='${CONF_ID}'"
        measurement = "dreamkast_talks"
        tag_columns_include = [ "title", "talk_difficulty" ]
      [[inputs.sql.query]]
        query="SELECT t.id AS talk_id,p.label,p.params FROM proposal_items p LEFT JOIN talks t ON p.talk_id = t.id  WHERE ( p.label = 'presentation_method' OR p.label = 'assumed_visitor' OR p.label = 'execution_phase' OR p.label = 'whether_it_can_be_published') AND p.conference_id='${CONF_ID}'"
        measurement = "dreamkast_proposal_items"
        tag_columns_include = [ "labels", "params" ]
      [[inputs.sql.query]]
        query="SELECT number_of_registrants FROM stats_of_registrants WHERE conference_id='${CONF_ID}'"
        measurement = "dreamkast_number_of_registrants" 
  
    [[inputs.github]]
      ## prevent rate limit, query per 30min
      interval = "30m"
      ## List of repositories to monitor
      repositories = [
        "cloudnativedaysjp/dreamkast",
        "cloudnativedaysjp/dreamkast-infra",
        "cloudnativedaysjp/dreamkast-ui",
        "cloudnativedaysjp/website",
        "cloudnativedaysjp/observability"
      ]
