Git Product home page Git Product logo

hubot-heroku-keepalive's Introduction

hubot-heroku-keepalive

A hubot script that keeps the hubot Heroku free web dyno alive.

Note that a free Heroku dyno can only run for 18 hours/day, so it will be required to sleep for at least 6 hours. Accessing your Hubot during a sleep period will wake it, but it will return to sleep after 30 minutes.

Installation

In hubot project repository, run:

npm install hubot-heroku-keepalive --save

Then add hubot-heroku-keepalive to your external-scripts.json:

[
  "hubot-heroku-keepalive"
]

Configuring

hubot-heroku-keepalive is configured by four environment variables:

  • HUBOT_HEROKU_KEEPALIVE_URL - required, the complete URL to keepalive, including a trailing slash.
  • HUBOT_HEROKU_WAKEUP_TIME - optional, the time of day (HH:MM) when hubot should wake up. Default: 6:00 (6 am)
  • HUBOT_HEROKU_SLEEP_TIME - optional, the time of day (HH:MM) when hubot should go to sleep. Default: 22:00 (10 pm)
  • HUBOT_HEROKU_KEEPALIVE_INTERVAL - the interval in which to keepalive, in minutes. Default: 5

You must set HUBOT_HEROKU_KEEPALIVE_URL and it must include a trailing slash โ€“ otherwise the script won't run. You can find out the value for this by running heroku apps:info. Copy the Web URL and run:

heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=PASTE_WEB_URL_HERE

If you want to trust a shell snippet from the Internet, here's a one-liner:

heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)

HUBOT_HEROKU_WAKEUP_TIME and HUBOT_HEROKU_SLEEP_TIME define the waking hours - between these times the keepalive will ping your Heroku app. Outside of those times, the ping will be suppressed, allowing the dyno to shut down. These times are based on the timezone of your Heroku application which defaults to UTC. You can change this with:

heroku config:add TZ="America/New_York"

Waking Hubot Up

This script will keep the dyno alive once it is awake, but something needs to wake it up. You can use the Heroku Scheduler to wake the dyno up. Add the scheduler addon by running:

heroku addons:create scheduler:standard

The scheduler must be manually configured from the web interface, so run heroku addons:open scheduler and configure it to run curl ${HUBOT_HEROKU_KEEPALIVE_URL}heroku/keepalive at the time configured for HUBOT_HEROKU_WAKEUP_TIME.

Heroku Scheduler Screenshot

Note that the Scheduler's time is in UTC. If you changed your application's timezone with TZ, you'll need to convert that time to UTC for the wakup job. For example, if HUBOT_HEROKU_WAKEUP_TIME is set to 06:00 and TZ is set to America/New_York, you'll need to set the Scheduler to run at 10:00 AM UTC.

Legacy Support

Hubot has for a long time had it's own builtin way to keep its web dyno alive, but this is an extraction of that behavior.

The legacy support uses the HEROKU_URL environment variable instead of HUBOT_HEROKU_KEEPALIVE_URL, so for forward compatability, hubot-heroku-keepalive will also use HEROKU_URL if it's present, and will also disable the legacy keepalive behavior if it's present.

Development

The best way is to use npm link and make sure to point HUBOT_HEROKU_KEEPALIVE_URL at the right place:

hubot-heroku-keepalive$ npm link
hubot-heroku-keepalive$ cd /path/to/your/hubot
hubot$ npm link hubot-heroku-keepalive
hubot$ export HUBOT_HEROKU_KEEPALIVE_URL=http://localhost:8080/
hubot$ bin/hubot

hubot-heroku-keepalive's People

Contributors

technicalpickles avatar treby avatar bkeepers avatar johnnaegle avatar abeger avatar chrisvfritz avatar despairblue avatar fcarrega avatar awaxa avatar kmanzana avatar parkr avatar jonathan-soifer avatar kei-s avatar

Watchers

Ryan Wei avatar

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.