beginnings of a module talking to mattermost
parent
5beda577fe
commit
9510cbfe13
@ -0,0 +1,40 @@
|
||||
|
||||
from flask import Flask, request
|
||||
import os
|
||||
import incident
|
||||
|
||||
app = Flask( __name__ )
|
||||
app.config.from_envvar( 'FIH_SETTINGS' )
|
||||
|
||||
mm = incident.Mattermost( app.config[ 'MATTERMOST_TEAM_ID' ],
|
||||
url = app.config[ 'MATTERMOST_URL' ],
|
||||
port = app.config[ 'MATTERMOST_PORT' ],
|
||||
login_id = app.config[ 'MATTERMOST_USER_EMAIL' ],
|
||||
password = app.config[ 'MATTERMOST_USER_PASSWORD' ],
|
||||
)
|
||||
|
||||
@app.route( '/mattermost/incident', methods = [ 'POST' ] )
|
||||
def mattermost_incident():
|
||||
# channel_name: testing
|
||||
# command: /incident
|
||||
# channel_id: o3ob1utim3nummoswjyt4174mo
|
||||
# user_name: marek
|
||||
# test_domain: faelix
|
||||
# text: test
|
||||
# team_id: 3woo8mbjrbb1in53xwdzi4ynqh
|
||||
# user_id: ko3uxmend7ne8ger4uw9mxkt1o
|
||||
# token: XXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
|
||||
if request.form[ 'token' ] in app.config[ 'MATTERMOST_COMMAND_TOKENS' ]:
|
||||
fi_number = incident.generate_incident_number()
|
||||
channel_name = fi_number.lower()
|
||||
mm.create_channel( channel_name, request.form[ 'text' ] )
|
||||
mm.notify( request.form[ 'channel_id' ], fi_number, channel_name )
|
||||
|
||||
return "" # "Starting incident %s in channel #%s." % ( fi_number, channel_name )
|
||||
else:
|
||||
return "Invalid command token."
|
||||
|
||||
@app.route( '/' )
|
||||
def hello_world():
|
||||
return 'Hello, World!'
|
@ -0,0 +1,31 @@
|
||||
|
||||
import os
|
||||
import datetime
|
||||
import random
|
||||
import mattermostdriver
|
||||
|
||||
random.seed( os.urandom( 8 ) )
|
||||
|
||||
def generate_incident_number():
|
||||
return "FI" + datetime.datetime.now().strftime( "%Y%m%d" ) + ( "%4d" % int( random.random() * 10000 ) )
|
||||
|
||||
class Mattermost( object ):
|
||||
def __init__( self, team_id, *args, **kwargs ):
|
||||
self.team_id = team_id
|
||||
self.mm = mattermostdriver.Driver( kwargs )
|
||||
self.mm.login()
|
||||
|
||||
def create_channel( self, name, purpose = None ):
|
||||
r = self.mm.channels.create_channel( options = { "team_id": self.team_id,
|
||||
"name": name,
|
||||
"purpose": "Incident " + name + ( purpose and " " + purpose or "" ),
|
||||
"header": "",
|
||||
"type": "P",
|
||||
} )
|
||||
print( repr( r ) )
|
||||
|
||||
|
||||
def notify( self, notify_channel_id, incident_number, incident_channel_name ):
|
||||
self.mm.posts.create_post( options = { 'channel_id': notify_channel_id,
|
||||
'message': 'Starting incident %s with discussion in channel -%s' % ( incident_number, incident_channel_name, ),
|
||||
} )
|
Loading…
Reference in New Issue