Skip to content

Commit

Permalink
Merge pull request #6 from bots-squad/wip-with-events
Browse files Browse the repository at this point in the history
🐯 starting to work with EventEmitter
  • Loading branch information
Philippe Charrière authored Nov 26, 2016
2 parents c796b04 + 41925aa commit edb1be7
Show file tree
Hide file tree
Showing 10 changed files with 426 additions and 250 deletions.
23 changes: 23 additions & 0 deletions core_observers/messengerObserver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const Observer = require(`./observers`).Observer;

let initialize = (broker) => {
let messenger = new Observer(broker)

messenger.on('failure', data => {
console.error(`failure from ${data.from}: ${data.message}`);
});

messenger.on('message', data => {
console.log(`message from ${data.from}: ${data.message}`);
});

messenger.on('error', data => {
console.log(`error from ${data.from}: ${data.message}`);
});

return messenger;
}

module.exports = {
initialize: initialize
};
16 changes: 16 additions & 0 deletions core_observers/observers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const EventEmitter = require('events').EventEmitter;

class Broker extends EventEmitter { }

class Observer {
constructor(broker) {
this.broker = broker;
}
on(message, work) { this.broker.on(message, work); }
emit(message, data) { this.broker.emit(message, data); }
}

module.exports = {
Observer: Observer
, Broker: Broker
};
28 changes: 16 additions & 12 deletions hector.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
#!/usr/bin/env node
const fs = require("fs");
const express = require('express');
const bodyParser = require('body-parser');
const postMessage = require('./libs/helpers.js').postMessage;

const whenEvent = require(`${process.env.HECTOR_PLUGIN_PATH}/app.js`).whenEvent;
const Broker = require(`./core_observers/observers`).Broker;
const Observer = require(`./core_observers/observers`).Observer;

/*
Express application
Expand All @@ -14,23 +13,28 @@ app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static('clones'));


let broker = new Broker();
require(`./core_observers/messengerObserver`).initialize(broker);
// plugin observers
require(`${process.env.HECTOR_PLUGIN_PATH}/eventsObserver.js`).initialize(broker);
require(`${process.env.HECTOR_PLUGIN_PATH}/botObserver.js`).initialize(broker);
require(`${process.env.HECTOR_PLUGIN_PATH}/ciObserver.js`).initialize(broker);
require(`${process.env.HECTOR_PLUGIN_PATH}/statusObserver.js`).initialize(broker);
require(`${process.env.HECTOR_PLUGIN_PATH}/gitObserver.js`).initialize(broker); // something more generic? we can share this with other plugins
require(`${process.env.HECTOR_PLUGIN_PATH}/executorObserver.js`).initialize(broker);


/*
this route is called from the DVCS (eg GitHub)
(see webhooks in your DVCS settings)
*/
app.post('/ci', (req, res) => {

whenEvent(req)

broker.emit('ci_event', req)
res.status(201).end();
});

app.listen(process.env.CI_HTTP_PORT)

let message = `🚀 Hector CI Server is started - listening on ${process.env.CI_HTTP_PORT}`;
console.log(message)

// ⚠️⚠️⚠️ now, here you could notify a bot, create issue ... What ever
if (process.env.BOT_NOTIFICATION_URL) {
postMessage(process.env.BOT_NOTIFICATION_URL, message)
}
broker.emit('message', {message: message, from: "Hector"});
238 changes: 0 additions & 238 deletions plugins/github/app.js

This file was deleted.

30 changes: 30 additions & 0 deletions plugins/github/botObserver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const Observer = require(`../../core_observers/observers`).Observer;
const postMessage = require('../../libs/helpers.js').postMessage;

let initialize = (broker) => {
let botObserver = new Observer(broker);

botObserver.on('failure', data => {
if (process.env.BOT_NOTIFICATION_URL) {
postMessage(process.env.BOT_NOTIFICATION_URL, `failure from ${data.from}: ${data.message}`);
}
});

botObserver.on('message', data => {
if (process.env.BOT_NOTIFICATION_URL) {
postMessage(process.env.BOT_NOTIFICATION_URL, `message from ${data.from}: ${data.message}`);
}
});

botObserver.on('error', data => {
if (process.env.BOT_NOTIFICATION_URL) {
postMessage(process.env.BOT_NOTIFICATION_URL, `error from ${data.from}: ${data.message}`);
}
});

return botObserver;
}

module.exports = {
initialize: initialize
};
Loading

0 comments on commit edb1be7

Please sign in to comment.