diff --git a/.gitignore b/.gitignore index 8f5408a..1132855 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ node_modules package-lock.json yarn.lock config/local*.yaml +*.idea +*.iml diff --git a/src/monitors/index.js b/src/monitors/index.js index 0ec91ab..efe57a8 100644 --- a/src/monitors/index.js +++ b/src/monitors/index.js @@ -1,4 +1,5 @@ module.exports = [ require('./waitingpods'), require('./longnotready'), + require('./newdeployment'), ]; diff --git a/src/monitors/newdeployment.js b/src/monitors/newdeployment.js new file mode 100644 index 0000000..1dcf7fd --- /dev/null +++ b/src/monitors/newdeployment.js @@ -0,0 +1,44 @@ +const EventEmitter = require('events'); +const config = require('config'); +const kube = require('../kube'); + +class DeploymentStatus extends EventEmitter{ + constructor(){ + super(); + } + + start(){ + setInterval(() => { + this.check(); + }, config.get('interval')); + + return this; + } + + async check(){ + let containers = await kube.getContainerStatuses(); + + for(let item of containers){ + if(!item.image === global.image){ + continue; + } + + if(!item.ready){ + continue; + } + + this.emit('message', { + fallback: `Container ${item.pod.metadata.namespace}/${item.pod.metadata.name}/${item.name} has deployed image ${item.image}`, + color: 'good', + title: `${item.pod.metadata.namespace}/${item.pod.metadata.name}/${item.name}`, + text: `Container deployed image *${item.image}*`, + mrkdwn_in: ['text'], + _key: `${item.pod.metadata.name}/${item.name}`, + }); + + global.image = item.image; + } + } +} + +module.exports = () => new DeploymentStatus().start(); \ No newline at end of file