Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

77 lines (64 sloc) 2.301 kb
# Description:
# Stagehand manages who is currently using your team's staging server
#
# Dependencies:
# None
#
# Configuration:
# None
#
# Commands:
# stagehand who [env] - Show who has booked the staging server and how much time they have left
# stagehand book [env] [minutes] - Book the staging server and optionally specify usage time. Default is 30min
# stagehand cancel [env] - Cancel the current booking
#
# Author:
# tinifni
class Message
constructor: (env, minutes) ->
@env = env
@minutes = minutes
getEnv: ->
if @env == undefined
return 'staging'
else
return @env
getMinutes: ->
if @minutes == undefined
return 30
else
return Number(@minutes)
bookEnv = (data, user, minutes) ->
return false if data.user != user && new Date() < data.expires
unless data.user == user && new Date() < data.expires
data.user = user
data.expires = new Date()
data.expires = new Date(data.expires.getTime() + minutes * 1000 * 60)
status = (env, data) ->
return env + ' is free for use.' unless new Date() < data.expires
data.user + ' has ' + env + ' booked for the next ' \
+ Math.ceil((data.expires - new Date())/(60*1000)) \
+ ' minutes.'
cancelBooking = (data) ->
data.expires = new Date(0)
module.exports = (robot) ->
robot.brain.on 'loaded', =>
robot.brain.data.stagehand ||= {}
for env in ['staging', 'development', 'production']
do (env) ->
robot.brain.data.stagehand[env] ||= { user: "initial", expires: new Date(0) }
robot.respond /stagehand book\s?([A-Za-z]+)*\s?(\d+)*/i, (msg) ->
message = new Message(msg.match[1], msg.match[2])
env = message.getEnv()
minutes = message.getMinutes()
bookEnv(robot.brain.data.stagehand[env], msg.message.user.name, minutes)
msg.send status(env, robot.brain.data.stagehand[env])
robot.respond /stagehand who\s?([A-Za-z]+)*/i, (msg) ->
message = new Message(msg.match[1])
env = message.getEnv()
msg.send status(env, robot.brain.data.stagehand[env])
robot.respond /stagehand cancel\s?([A-Za-z]+)*/i, (msg) ->
message = new Message(msg.match[1])
env = message.getEnv()
cancelBooking(robot.brain.data.stagehand[env])
msg.send status(env, robot.brain.data.stagehand[env])
Jump to Line
Something went wrong with that request. Please try again.