Giter VIP home page Giter VIP logo

roobot's People

Contributors

chadwhitacre avatar changaco avatar patcon avatar rohitpaulk avatar webmaven avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

roobot's Issues

Add hubot-tweeter script for creating @gittip tweets from IRC

https://github.com/jhubert/hubot-tweeter

Nifty little script we used at work, which allowed stuff like this:

roobot: tweet@gittip this is a test tweet

This could allow @whit537 to easily distribute control of the twitter account among a few trusted people, and it would bring the act of tweeting into the flow of chat.

We could also use it for the @gittip_status account during times when everyone is troubleshooting an issue that needs to be communicated (if we're still using this):

roobot: tweet@gittip_status NOOOOOO!! We're currently experiencing an outage! PANIC

Of course, it doesn't currently allow access control, so this is blocked on #12.

Add script to test branches using `heroku fork` of roobot-test app

There's nothing privileged in roboot-test heroku app. Would be awesome if we could easily spin up a new heroku env, which would also copy all the important envvars from roobot-test.

We could steal the code from here:
https://github.com/heroku/heroku/blob/master/lib/heroku/command/fork.rb

patcon: roobot deploy gittip/roobot@a-feature-branch
roobot: Your feature branch is available here: https://roobot--a-feature-branch.herokuapp.com

Add script for timezone conversion

Correlating events across systems and timezones is hard. Aiming to put everything in UTC for comparison between systems. But sometimes you still need to think in terms of native timezones (ie. "we were seeing that issue yesterday afternoon, but is that incident in librato the one I'm thinking?")

https://gist.github.com/patcon/9332299

or https://github.com/github/hubot-scripts/blob/master/src/scripts/time.coffee

We should package this script in its own npm package and host it.

Create command for deploying with heroku pipeline plugin

Thinking we can do this without access control, in all honesty. This command would only deploy things to roobot-prod heroku app that are already on roobot-test. And things only get to roobot-test if they're tagged commits on "master", as that's all the travis is told to deploy.

Thinking this would pair nicely with a custom heroku buildpack that allowed us to use an envvar to set keybase.io users who must sign the tag in order for it to compile and deploy.

So basically, here's the pieces:

  • set up travis to only deploy tagged commits on master to heroku
  • custom heroku buildpack that expects something like this: HEROKU_BUILDPACK_SIGS=whit537,patcon,seanlinsley,<etc>
  • enable heroku labs:enable user-env-compile (See: https://discussion.heroku.com/t/passing-environment-variables-to-slug-compiler/75)
  • check the signed tag against keybase.io usernames from envvar, ensuring that it has been signed by an authorized user
  • if everything looks good, deploy to roobot-test (ie. everything on roobot-test is cryptographically guaranteed trusted by us)
  • use a hubot command to deploy a release from roobot-test to roobot-prod

EDIT: Apparently heroku labs:enable user-env-compile is enabled by default now:
http://stackoverflow.com/a/22909608/504018

Improve SVG to illustrate full PR-to-deploy workflow

Would be great to incorporate complete workflow:

  • merging PR with big green button on github
  • pull local changes from github, using grunt release to create signed tag
  • pushing to heroku test env
  • promote to production

Extract `hubot-notifier-base` into utility hubot package

Moved from hubot-archive/hubot-freshdesk-ticket-notifier#2

Currently, there are a few things we're duplicating in Gittip's notifier packages:

  • various levels of setting notifier room:
    1. allowing the setting of one global room envvar for all notifiers (not yet possible to implement)
    2. setting room(s) via envvar per notifier (override)
    3. notification-level overriding via querystring param
  • allowing default and customized route (not sure the value in this... but saw it done in gittip's pagerduty notifier)
  • allowing custom mustache templating via envvar

Start monitoring brute-force login attempts on roobot endpoint

If we're going to start trusting roobot to do important things, and if he lives on the public internet (which he does: https://user:[email protected]), then we need to know if someone is trying to bruteforce access through express framework's basic auth.

A failed attempt looks like this in the heroku logs:

2014-02-22T00:25:46.442907+00:00 heroku[router]: at=info method=GET path=/ host=roobot-prod.herokuapp.com request_id=3fcdfa4b-82a9-4780-b275-07058878b037 fwd="68.232.91.35" dyno=web.1 connect=7ms service=9ms status=401 bytes=214

Create script to handle heroku deploy notifications

Right now, we're using heroku's IRC deploy hook: gratipay/gratipay.com#2301

Using the http webhook and pointing it at a hubot route would make it so that the full payload was delivered, and the message would be set in one place, rather than in each apps envvars. This would also allow us to link to the github commit or the "compare" page for the diff between the last deploy, which isn't currently possible, as heroku msg templates don't have a mapping for the github repo :)

Add ability to force auth on commands from external packages not implementing auth

#13 made me realize that there are tons of scripts floating around that don't take authentication into consideration. Rather than try to force PR's into each external package, perhaps we could figure out something clever -- like having an envvar HUBOT_IRC_AUTH_REQUIRED where we set package/script names, with the intention that running commands from these packages/scripts requires a certain auth role. Or perhaps some sort of regex that requires broad sweeps of commands to got through auth.

Anyhow, something to think on for later.

Investigate why IRC disconnect happened

It was noticed that roobot was essentially down, but I didn't receive a notification as his web process was stilling running and serving via the /ping route:
https://botbot.me/freenode/gittip/msg/11512011/

The logs looked fine, except suddenly there was no IRC activity.

It seems that hubot's process was simply not connecting to freenode. May have been related to heroku trying to build from a personal feature branch that had since been removed.

I've pushed fixes for that, and we'll see if they stay up. Might be worth adding some logging to the hubot-irc adapted to ensure that we're still connected to IRC...

Use hubot-gittip to allow us to allocate Gittip funds to other projects from IRC

https://github.com/myplanetdigital/hubot-gittip

Right now, I can adjust my take as a gittip team member, but I can't use gittip team funds to support projects/people who help make gittip happen. I suppose I could encourage them to join the gittip team and start upping their take, but that doesn't seem right.

Would it make sense to add the ability for anyone in the gittip chat room to control the giving of tips to other Gittip accounts (obviously not for giving to team members, as that's what the team feature is for).

(We don't yet have access control on hubot, and that issue is deeply rooted in how hubot works, but I think we could manage this without. So long as the tips coming out of the gittip account were only manipulable via the public chat room, and not via PM, then everything would be auditable. If some random person came in and adjusted their tip, /someone/ would notice, either from reading the scroll back or seeing it live. I think we could have this feature without needing access control, but we could always re-evaluate if there's an issue. And obviously we'd have a consensus on the level of discussion that would need to happen before initiating a weekly tip on behalf of the company :)

Update deploy section in README

The diagram and explanation isn't up-to-date. It should explain that we deploy via travis

We might also want to add a roadmap section for #54

Create script for managing G+ circles

Rationale

Adding people to G+ circles is important because circles are the main way that we can invite large groups of people to participate in a pre-arranged hangout-on-air at a future date. For example, we might start with a "team" circle for anyone who has expressed interest in the gittip project, but gradually move to a "coder" and "designer" and "artist" circle as we reach the need to invite certain segments of the contributor community to participate.

An invite to a pre-scheduled hangout-on-air will show up on a users google calendar, and allow them to RSVP from the gcal event. This will make is as simple as possible to remember the event and set aside time to participate, or perhaps simply listen in.

References

As of right now, G+ circles can be managed via API for personal G+ accounts:
https://developers.google.com/+/domains/api/circles

It seems that circles for G+ pages (where Gittip's circles fit), is by request only:
https://developers.google.com/+/api/pages-signup

I've sent a sign-up request.

In the meantime, I'll work on creating a script for managing personal circles. We can always share the personal circle and semi-regularly make sure everyone from that list is sync'ed with the corresponding Gittip page circle:
https://support.google.com/plus/answer/1684780?hl=en

Sample interaction

patcon>> roobot circle add [email protected]
roobot>> [email protected] has been added to the "code" circle
patcon>> roobot circle add [email protected] design music
roobot>> [email protected] has been added to the "design" and "music" circle
patcon>> roobot circle remove [email protected] code
roobot>> [email protected] has been removed from the "code" circle

cc: @whit537

Figure out why roobot keeps going down

This keeps happening :/

2014-02-19T18:58:51.226112+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2014-02-19T18:58:52.980963+00:00 heroku[web.1]: Process exited with status 0
2014-02-19T18:58:48.837723+00:00 heroku[web.1]: Idling
2014-02-19T18:58:48.840258+00:00 heroku[web.1]: State changed from up to down

Monitor hubot uptime and logs

Could use uptimerobot (free) to monitor an endpoint.

Could also use Loggly to monitor hubot logs using their heroku addon. (Also free)

Would be great to use this as an opportunity to start using a pagerduty workflow for gittip -- sending notifications when the hubot goes down. After all, if no one trusts when it will be available, they'll never want to depend on it :)

Psssst @m3matta :)

Create script create a new hangout on air on behalf of G+ page

There is currently no API for G+ pages, nor for creating a new hangout-on-air, although there is a "hack" to create a non-recorded hangout.

It was suggested to me by one of the hubot maintainers that at Github, they use mechanize to create other services that hubot talks to -- like a service-oriented architecture for hubot.

From the README:

The Mechanize library is used for automating interaction with websites. Mechanize automatically stores and sends cookies, follows redirects, and can follow links and submit forms. Form fields can be populated and submitted. Mechanize also keeps track of the sites that you have visited as a history.

Seems perhaps we could script the management of hangouts so that anyone looking to talk face-to-face could do so with a recorded copy.

This is pretty low priority, but I think the more face-time we get, the better :)

Create command to spin up droplet for paydays

Rather than store the script in the hubot repo, would be great to just pull one of these:

curl https://raw.github.com/gittip/www.gittip.com/master/scripts/create_payday_droplet.sh | bash

That way, the logic stays with the codebase and people can easily submit pull requests and know it's there.


Blocked on #15

new script for understanding myers-briggs compatibilities (???)

http://en.wikipedia.org/wiki/Myers_briggs

OK, this will be a pet project. I wanted to do this at my last job, but never got around to it. Myers-Briggs is a personality tool that allows you to fill out a questionnaire and determine the 4-letter "type" for your personality traits, with each letter-place corresponding to a scale with two ends -- ENLP, INLP, etc etc. I know people who swear by it, and go to great lengths to build maximally compatible teams by pairing personalities appropriately.

The thought is that, for those who care to evaluate themselves and provide their type, it might help us to understand how we might be clashing with others in approach and point-of-view, which could be particularly helpful since so much of our communication is via text, and it might be hard to understand compatibility compared to in-person interactions.

Here's how I imagine it might work:

  • One command links to a questionnaire, so we're all using the same baseline.
  • Another command allows each person to set their Myers-Briggs type.
  • Another command allows you to check anyone else type.
  • Another command allows you to see how compatible you might be with someone else's type:
    http://www.massmatch.com/MBTI-2.php

Yes, it's never going to be the full picture, but it might help us understand where to start in order to best work with one another :)

Create heroku account for gittip apps

At the moment, I have roobot deploying with an API key from my personal account. It seems that the recommended way of operating is to give each app its own heroku account, to help isolate concerns.

At the very least, we should be generating the keys with a special dummy heroku account, yes?

This will be useful for that: https://github.com/ddollar/heroku-accounts

To Do

  • create dummy heroku account (email? not sure if this is too heavy for [email protected], which goes to general freshdesk support)
  • regenerate travis configs

Create `botbot me [back <# of messages>]` command to fetch botbot links really easily

I don't know about you guys, but I do this a bunch of times a day when trying to cross-reference convos. Would be cool if we could do it via a private msg to roobot and get the link really easily without loading up a new tab. Would also work in the public channel, but I suppose that would be discouraged if it's not helping the convo somehow

Add freshdesk-notification script

As discussed in Hangout standup.

Final thought was that subject lines are too personal to drop into the public chat, but that we could create Dispatchr rules (a Freshdesk thing) to tag priority based on certain keywords, and include the priority in the chat notification.

Suggested events to notify on:
New ticket
Agent responded (?)
Customer replied
Closed

roobot>> [Freshdesk] #222 (★★★☆) - Ticket created. http://...
# Some replies and sets priority down to low as not actually urgent
roobot>> [Freshdesk] #222 (★☆☆☆) - Customer responded. http://...
# Agent responds and closes
roobot>> [Freshdesk] #222 (★☆☆☆) - Ticket closed. http://...

cc: @whit537 @pjf @bruceadams

EDIT: Most obviously for support@ tickets, to start with. vendors@ has some useful emails, but mostly noise

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.