Code files

This commit is contained in:
Akhil
2017-07-31 11:33:31 +05:30
parent 073a63ebdd
commit b9ae409ec0
801 changed files with 17535 additions and 0 deletions
@@ -0,0 +1,4 @@
.git
.gitignore
node_modules
npm-debug.log
@@ -0,0 +1,7 @@
FROM node:slim
RUN mkdir -p /home/node/service
WORKDIR /home/node/service
COPY package.json /home/node/service
RUN npm install
COPY . /home/node/service
CMD [ "node", "index.js" ]
@@ -0,0 +1,32 @@
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'source ~/.bashrc && cd eventservice && npm install'
}
}
stage('Test'){
steps {
sh 'source ~/.bashrc && cd eventservice && npm test'
}
}
stage('Container'){
steps {
sh 'source ~/.bashrc && cd eventservice && sh build.sh container'
}
}
stage('Deploy'){
steps {
sh 'source ~/.bashrc && cd eventservice && sh build.sh deploy'
}
}
}
}
@@ -0,0 +1,23 @@
#!/bin/bash
source ~/.bashrc
GITSHA=$(git rev-parse --short HEAD)
case "$1" in
container)
sudo -u pelger docker build -t eventservice:$GITSHA .
sudo -u pelger docker tag eventservice:$GITSHA pelger/eventservice:$GITSHA
sudo -i -u pelger docker push pelger/eventservice:$GITSHA
;;
deploy)
sed -e s/_NAME_/eventservice/ -e s/_PORT_/8082/ < ../deployment/service-template.yml > svc.yml
sed -e s/_NAME_/eventservice/ -e s/_PORT_/8082/ -e s/_IMAGE_/pelger\\/eventservice:$GITSHA/ < ../deployment/deployment-template.yml > dep.yml
sudo -i -u pelger kubectl apply -f $(pwd)/svc.yml
sudo -i -u pelger kubectl apply -f $(pwd)/dep.yml
;;
*)
echo 'invalid build command'
exit 1
;;
esac
@@ -0,0 +1,5 @@
'use strict'
const wiring = require('./wiring')
const service = require('./service')()
wiring(service)
@@ -0,0 +1,17 @@
{
"name": "event-service",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"no test specified\" && exit 0"
},
"keywords": [],
"author": "Peter Elger <peter.elger@nearform.com>",
"license": "ISC",
"dependencies": {
"concordant": "^0.2.1",
"mongodb": "^2.2.25",
"redis": "^2.6.5"
}
}
@@ -0,0 +1,80 @@
'use strict'
const { MongoClient } = require('mongodb')
const { dns } = require('concordant')()
module.exports = service
function service () {
var db
setup()
function setup () {
const mongo = '_main._tcp.mongo.micro.svc.cluster.local'
dns.resolve(mongo, (err, locs) => {
if (err) {
console.error(err)
return
}
const { host, port } = locs[0]
const url = `mongodb://${host}:${port}/events`
MongoClient.connect(url, (err, client) => {
if (err) {
console.log('failed to connect to MongoDB retrying in 100ms')
setTimeout(setup, 100)
return
}
db = client
db.on('close', () => db = null)
})
})
}
function record (args, cb) {
if (!db) {
cb(Error('No database connection'))
return
}
const events = db.collection('events')
const data = {
ts: Date.now(),
eventType: args.type,
url: args.url
}
events.insert(data, (err, result) => {
if (err) {
cb(err)
return
}
cb(null, result)
})
}
function summary (args, cb) {
if (!db) {
cb(Error('No database connection'))
return
}
const summary = {}
const events = db.collection('events')
events.find({}).toArray( (err, docs) => {
if (err) return cb(err)
docs.forEach(function (doc) {
if (!(summary[doc.url])) {
summary[doc.url] = 1
} else {
summary[doc.url]++
}
})
cb(null, summary)
})
}
return {
record: record,
summary: summary
}
}
@@ -0,0 +1,53 @@
'use strict'
const { dns } = require('concordant')()
const redis = require('redis')
const QNAME = 'eventservice'
module.exports = wiring
function wiring (service) {
const endpoint = '_main._tcp.redis.micro.svc.cluster.local'
dns.resolve(endpoint, (err, locs) => {
if (err) {
console.log(err)
return
}
const { port, host } = locs[0]
pullFromQueue(redis.createClient(port, host))
})
function pullFromQueue (client) {
client.brpop(QNAME, 5, function (err, data) {
if (err) console.error(err)
if (err || !data) {
pullFromQueue(client)
return
}
const msg = JSON.parse(data[1])
const { action, returnPath } = msg
const cmd = service[action]
if (typeof cmd !== 'function') {
pullFromQueue(client)
return
}
cmd(msg, (err, result) => {
if (err) {
console.error(err)
pullFromQueue(client)
return
}
if (!returnPath) {
pullFromQueue(client)
return
}
client.lpush(returnPath, JSON.stringify(result), (err) => {
if (err) console.error(err)
pullFromQueue(client)
})
})
})
}
}