Skip to content

Instantly share code, notes, and snippets.

@Duologic
Last active May 9, 2018 12:45
Show Gist options
  • Save Duologic/69587c0b7b1cb5a3608717cb0371eb26 to your computer and use it in GitHub Desktop.
Save Duologic/69587c0b7b1cb5a3608717cb0371eb26 to your computer and use it in GitHub Desktop.
Quick and dirty script to get Zendesk view counts into InfluxDB, Graphite/Carbon AND Prometheus (oh no, overkill)
# pip install zendesk influxdb awesome-slugify
from influxdb import InfluxDBClient
from slugify import slugify
from zendesk import Zendesk
import graphitesend
import os
import socket
import time
PROMETHEUS_FILE = os.environ.get('PROMETHEUS_FILE')
CARBON_SERVER = os.environ.get('CARBON_SERVER')
CARBON_PORT = int(os.environ.get('CARBON_PORT'))
CARBON_PREFIX = os.environ.get('CARBON_PREFIX')
ZENDESK_URL = os.environ.get('ZENDESK_URL')
ZENDESK_USER = os.environ.get('ZENDESK_USER')
ZENDESK_TOKEN = os.environ.get('ZENDESK_TOKEN')
zendesk = Zendesk(ZENDESK_URL, '{}/token'.format(ZENDESK_USER), ZENDESK_TOKEN, api_version=2)
epoch = epoch=time.time()
carbon = graphitesend.init(graphite_server=CARBON_SERVER, graphite_port=CARBON_PORT, prefix=CARBON_PREFIX)
views = zendesk.list_views()
ids = []
for view in views['views']:
ids.append(view['id'])
counts = zendesk.count_many_views(ids=ids)
view_counts = {}
for count in counts['view_counts']:
view_counts[count['view_id']] = zendesk.count_view(view_id=count['view_id'])['view_count']['value']
with open(PROMETHEUS_FILE, 'wb') as f:
f.write('# HELP zendesk_ticket_count Current number of tickets in a specific status\r\n')
f.write('# TYPE zendesk_ticket_count counter\r\n')
json_body = []
for view in views['views']:
value = view_counts[view['id']]
if value != None:
f.write('zendesk_ticket_count{{view="{}"}} {}\r\n'.format(slugify(view['raw_title'], to_lower=True), value))
metric = {
"measurement": slugify(view['raw_title'], to_lower=True),
"tags": {
"source": "zendesk",
"type": "view_count"
},
"fields": {
"value": value
}
}
carbon.send('{}.view_count'.format(slugify(view['raw_title'], to_lower=True)), float(value))
json_body.append(metric)
client = InfluxDBClient('localhost', 8086, database='example')
client.create_database('example')
client.write_points(json_body)
@Duologic
Copy link
Author

Duologic commented Mar 7, 2018

I had it up and running in a few minutes with this Vagrantfile and installing the requirements with PIP:

Vagrant.configure(2) do |config|
  config.vm.box = "codeyourinfra/monitor"
  config.vm.box_version = "1.0"
  config.vm.network "private_network", ip: "192.168.33.10"

  # disable USB 2.0
  config.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--usb", "off"]
      vb.customize ["modifyvm", :id, "--usbehci", "off"]
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment