measurence / kippino

A Slack bot that keeps track of your KPIs
MIT License
15 stars 1 forks source link

Kippino, the KPI bot

This is a Slack bot that asks people about KPIs

Check out the announcement post on our tech blog.

Building

$ npm install
$ ./node_modules/typescript/bin/tsc

Running

To run the bot you'll need:

Then you can run the bot by passing the above with env vars:

$ AUTH_JSON=./xxx.json SLACK_TOKEN=XYZ SPREADSHEET_ID=ABC \
node build/index.js

The AUTH_JSON variable is only required if your spreadsheet is private. Remember to share read/write access on the spreadsheet to the service account email that you created.

Running without authentication

In case you're running the bot without authentication (i.e. without setting AUTH_JSON), you'll have to publish the spreadsheet to the web (File > Publish to the Web). You can find more details here.

Running on Heroku

The Heroku deploy button currently only works for public spreadsheets that don't require authentication.

Deploy

Never heard of Heroku? Here's how to install it: https://youtu.be/8lzdCWoiDbY

Worksheets

At start, the bot will create the KPIs and Data worksheets if they don't exist yet.

The KPIs worksheet is where you put the KPIs you want to track. Each KPI must have the following attributes:

The Data worksheet is where Kippino puts the values collected from your team. Each data point has the following attributes:

Commands

The bot accepts the following commands:

Deployment options

Docker

You can run Kippino via Docker, there's already a pre-built docker image or you can build your own from the provided Dockerfile.

$ docker run \
  -v ./auth.json:/auth.json \
  -e AUTH_JSON=/auth.json \
  -e SLACK_TOKEN=xyz \
  -e SPREADSHEET_ID=abc \
  --name kippino measurence/kippino

Kubernetes / Google Container Service

You can easily deploy Kippino on a Kubernetes cluster with the following config. The authentication JSON and the Slack token should be configured as secrets.

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kippino
  labels:
    app: kippino
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      name: kippino
      labels:
        app: kippino
    spec:
      volumes:
      - name: kippino-google-auth
        secret:
          secretName: "kippino-google-auth"
      containers:
      - image: "measurence/kippino:latest"
        name: kippino
        volumeMounts:
        - name: "kippino-google-auth"
          mountPath: "/kippino-google-auth/"
          readOnly: true
        env:
        - name: SLACK_TOKEN
          valueFrom:
            secretKeyRef:
              name: kippino
              key: "slack-token"
        - name: SPREADSHEET_ID
          value: "XYZ"
        - name: AUTH_JSON
          value: "/kippino-google-auth/auth.json"
        resources:
          requests:
            cpu: 0.1
            memory: "256Mi"
          limits:
            cpu: 0.1
            memory: "256Mi"         

Gotchas

Dealing with user timezone and online status

Currently the bot is quite stupid and it will start asking questions as soon as a new day starts in the bot timezone.

It will also keep waiting for an answer "forever", it doesn't keep "nudging" people until they respond.

Spreadsheet locale and number formatting

Make sure that your spreadsheet is configured in the US locale since the bot uses Javascript's parseFloat to parse numbers in the US format (using . as decimal separator).

Date formatting

Dates in the spreadsheet must be formatted as YYYY-MM-DD.

For weekly KPIs, the since field must be set to the Monday of the week you want to start collecting the KPI.