Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@ Khronos is the Titan god of time and the ages, and is described as destructive a
This is a listing of the "functional title" of a task group and which tasks are utilized to accomplish them:

- prune exited weave containers
- `khronos:weave:prune`: Gets all the docks and enqueues a job for each.
- `khronos:weave:prune-dock`: Gets all the exited weave containers and enqueues a job for each to delete them.
- `khronos:containers:delete`: Deletes individual containers.
- `weave.prune`: Gets all the docks and enqueues a job for each.
- `weave.prune-dock`: Gets all the exited weave containers and enqueues a job for each to delete them.
- `containers.delete`: Deletes individual containers.
- prune image-builder containers
- `khronos:containers:image-builder:prune`: Gets all the docks and enqueues a job for each.
- `khronos:containers:image-builder:prune-dock`: Gets all the exited image-builder containers and enqueues a job for each to delete them.
- `khronos:containers:delete`: Deletes individual containers.
- `containers.image-builder.prune`: Gets all the docks and enqueues a job for each.
- `containers.image-builder.prune-dock`: Gets all the exited image-builder containers and enqueues a job for each to delete them.
- `containers.delete`: Deletes individual containers.
- prune orphan containers
- `khronos:containers:orphan:prune`: Gets all the docks and enqueues a job for each.
- `khronos:containers:orphan:prune-dock`: Gets every container on the dock and enqueues a job to check it against mongo.
- `khronos:containers:orphan:check-against-mongo`: Check container against mongo and if it doesn't exist, enqueue a job to delete it.
- `khronos:containers:remove`: Stops and deletes containers.
- `containers.orphan.prune`: Gets all the docks and enqueues a job for each.
- `containers.orphan.prune-dock`: Gets every container on the dock and enqueues a job to check it against mongo.
- `containers.orphan.check-against-mongo`: Check container against mongo and if it doesn't exist, enqueue a job to delete it.
- `containers.remove`: Stops and deletes containers.
- canary tests
- `khronos:canary:build`: Rebuilds a specific canary container without cache and reports success/failure to datadog.
- `canary.build`: Rebuilds a specific canary container without cache and reports success/failure to datadog.

```
NODE_ENV=production|staging npm start
Expand Down
40 changes: 21 additions & 19 deletions bin/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
'use strict'

var program = require('commander')
var joi = require('joi')

main()

Expand Down Expand Up @@ -30,29 +31,30 @@ function main () {
}
var username = program.username || 'guest'
var password = program.password || 'guest'

var hermesClient = require('runnable-hermes')
.hermesSingletonFactory({
name: 'khronos',
hostname: hostname,
port: port,
username: username,
password: password,
queues: [program.queue]
var RabbitMQ = require('ponos/lib/rabbitmq')
var publisher = new RabbitMQ({
name: 'khronos',
hostname: hostname,
port: port,
username: username,
password: password,
tasks: [
{
name: program.queue,
jobSchema: joi.object({}).unknown()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might as well not define this ... It's an optional argument

Copy link
Member Author

@podviaznikov podviaznikov Sep 13, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe keep it? at least it will validate that job is an object

}
]
})
publisher.connect()
.tap(function () {
process.stdout.write('enqueueing job... ')
return publisher.publishTask(program.queue, program.job)
})
.connect(enqueueTask)

function enqueueTask (err) {
if (err) { throw err }
process.stdout.write('enqueueing job... ')
hermesClient.on('publish', function () {
process.stdout.write('done.\r\n')
.then(function () {
console.log('enqueued the following job to ' + program.queue)
console.log(program.job)
hermesClient.close()
return publisher.disconnect()
})
hermesClient.publish(program.queue, program.job)
}

function parseJob (job) {
if (job === '') { job = '{}' }
Expand Down
50 changes: 25 additions & 25 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,31 @@ const events = {
}

const tasks = {
'khronos:canary:build': require('tasks/canary/build'),
'khronos:canary:failover': require('tasks/canary/failover'),
'khronos:canary:github-branch': require('tasks/canary/github-branch'),
'khronos:canary:log': require('tasks/canary/log'),
'khronos:canary:network': require('tasks/canary/network/index'),
'khronos:canary:network-ping': require('tasks/canary/network/ping'),
'khronos:containers:delete': require('tasks/containers/delete'),
'khronos:containers:image-builder:prune': require('tasks/image-builder/prune'),
'khronos:containers:image-builder:prune-dock': require('tasks/image-builder/prune-dock'),
'khronos:containers:orphan:check-against-mongo': require('tasks/containers/check-against-mongo'),
'khronos:containers:orphan:prune': require('tasks/containers/prune-orphans'),
'khronos:containers:orphan:prune-dock': require('tasks/containers/prune-orphans-dock'),
'khronos:containers:remove': require('tasks/containers/remove'),
'khronos:context-versions:check-recent-usage': require('tasks/context-versions/check-recent-usage'),
'khronos:context-versions:prune-expired': require('tasks/context-versions/prune-expired'),
'khronos:context-versions:remove-and-protect-instances': require('tasks/context-versions/remove-and-protect-instances'),
'khronos:images:check-against-context-versions': require('tasks/images/check-against-context-versions'),
'khronos:images:prune': require('tasks/images/prune'),
'khronos:images:prune-dock': require('tasks/images/prune-dock'),
'khronos:images:remove': require('tasks/images/remove'),
'khronos:instances:cleanup': require('tasks/instances/cleanup'),
'khronos:metrics:container-status': require('tasks/metrics/container-status'),
'khronos:metrics:report-org-container-status': require('tasks/metrics/report-org-container-status'),
'khronos:weave:prune': require('tasks/weave/prune'),
'khronos:weave:prune-dock': require('tasks/weave/prune-dock')
'canary.build.run': require('tasks/canary/build'),
'canary.failover.run': require('tasks/canary/failover'),
'canary.github-branch.run': require('tasks/canary/github-branch'),
'canary.log.run': require('tasks/canary/log'),
'canary.network.run': require('tasks/canary/network/index'),
'canary.network-ping.run': require('tasks/canary/network/ping'),
'containers.delete': require('tasks/containers/delete'),
'containers.image-builder.prune': require('tasks/image-builder/prune'),
'containers.image-builder.prune-dock': require('tasks/image-builder/prune-dock'),
'containers.orphan.check-against-mongo': require('tasks/containers/check-against-mongo'),
'containers.orphan.prune': require('tasks/containers/prune-orphans'),
'containers.orphan.prune-dock': require('tasks/containers/prune-orphans-dock'),
'containers.remove': require('tasks/containers/remove'),
'context-versions.check-recent-usage': require('tasks/context-versions/check-recent-usage'),
'context-versions.prune-expired': require('tasks/context-versions/prune-expired'),
'context-versions.remove-and-protect-instances': require('tasks/context-versions/remove-and-protect-instances'),
'images.check-against-context-versions': require('tasks/images/check-against-context-versions'),
'images.prune': require('tasks/images/prune'),
'images.prune-dock': require('tasks/images/prune-dock'),
'images.remove': require('tasks/images/remove'),
'instances.cleanup': require('tasks/instances/cleanup'),
'metrics.container-status': require('tasks/metrics/container-status'),
'metrics.report-org-container-status': require('tasks/metrics/report-org-container-status'),
'weave.prune': require('tasks/weave/prune'),
'weave.prune-dock': require('tasks/weave/prune-dock')
}

const server = new ponos.Server({
Expand Down
68 changes: 39 additions & 29 deletions lib/models/rabbitmq.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,18 @@
* @module lib/models/rabbitmq
*/
'use strict'
const joi = require('joi')
const RabbitMQ = require('ponos/lib/rabbitmq')

function generateJobDefs (tasks) {
return tasks.map(function (task) {
return {
name: task,
jobSchema: joi.object({}).unknown()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to not define these

Copy link
Member Author

@podviaznikov podviaznikov Sep 13, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe keep it? at least it will validate that job is an object

}
})
}

/**
* Rabbitmq internal singelton instance.
* @type {rabbitmq}
Expand All @@ -15,37 +25,37 @@ const publisher = new RabbitMQ({
port: process.env.RABBITMQ_PORT,
username: process.env.RABBITMQ_USERNAME,
password: process.env.RABBITMQ_PASSWORD,
events: [
events: generateJobDefs([
'instance.container.health-check.failed',
'instance.expired'
],
tasks: [
'khronos:canary:build',
'khronos:canary:failover',
'khronos:canary:github-branch',
'khronos:canary:log',
'khronos:canary:network',
'khronos:canary:network-ping',
'khronos:containers:delete',
'khronos:containers:image-builder:prune',
'khronos:containers:image-builder:prune-dock',
'khronos:containers:orphan:check-against-mongo',
'khronos:containers:orphan:prune',
'khronos:containers:orphan:prune-dock',
'khronos:containers:remove',
'khronos:context-versions:check-recent-usage',
'khronos:context-versions:prune-expired',
'khronos:context-versions:remove-and-protect-instances',
'khronos:images:check-against-context-versions',
'khronos:images:prune',
'khronos:images:prune-dock',
'khronos:images:remove',
'khronos:instances:cleanup',
'khronos:metrics:container-status',
'khronos:metrics:report-org-container-status',
'khronos:weave:prune',
'khronos:weave:prune-dock'
]
]),
tasks: generateJobDefs([
'canary.build.run',
'canary.failover.run',
'canary.github-branch.run',
'canary.log.run',
'canary.network.run',
'canary.network-ping.run',
'containers.delete',
'containers.image-builder.prune',
'containers.image-builder.prune-dock',
'containers.orphan.check-against-mongo',
'containers.orphan.prune',
'containers.orphan.prune-dock',
'containers.remove',
'context-versions.check-recent-usage',
'context-versions.prune-expired',
'context-versions.remove-and-protect-instances',
'images.check-against-context-versions',
'images.prune',
'images.prune-dock',
'images.remove',
'instances.cleanup',
'metrics.container-status',
'metrics.report-org-container-status',
'weave.prune',
'weave.prune-dock'
])
})

module.exports = publisher
2 changes: 1 addition & 1 deletion lib/tasks/canary/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class BuildCanary extends CanaryBase {
constructor (job) {
super(job)
this.instanceId = process.env.CANARY_REBUILD_INSTANCE_ID
this.queue = 'khronos:canary:build'
this.queue = 'canary.build'
this.name = 'Build Canary'
this.gauge = 'canary.build'

Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/canary/failover.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ module.exports = (job) => {
class FailOverCanary extends CanaryBase {
constructor (job) {
super(job)
this.queue = 'khronos:canary:failover'
this.queue = 'canary.failover'
this.name = 'FailOver Canary'
this.gauge = 'canary.failover'

Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/canary/github-branch.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class GithubBranchCanary extends CanaryBase {
constructor (job) {
super(job)
this.instanceId = process.env.CANARY_GITHUB_BRANCHES_INSTANCE_ID
this.queue = 'khronos:canary:github-branch'
this.queue = 'canary.github-branch'
this.name = 'Github Branch Canary'
this.gauge = 'canary.github-branch'
this.branchName = 'test-branch-' + (new Date().getTime())
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/canary/log.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class LogCanary extends CanaryBase {
constructor (job) {
super(job)
this.instanceId = process.env.CANARY_LOG_INSTANCE_ID
this.queue = 'khronos:canary:log'
this.queue = 'canary.log'
this.name = 'Log Canary'
this.gauge = 'canary.log'
this.jobTimeout = 1000 * 60
Expand Down
4 changes: 2 additions & 2 deletions lib/tasks/canary/network/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const containerNetworkQuery = [{
*/
module.exports = () => {
const log = logger.child({
queue: 'khronos:canary:network'
queue: 'canary.network'
})
return Promise.using(mongodbHelper(), (mongoClient) => {
const instancesDb = mongoClient.db.collection('instances')
Expand All @@ -65,7 +65,7 @@ module.exports = () => {
log.trace({ network: network }, 'no ips to ping, skipping')
return
}
rabbitmq.publishTask('khronos:canary:network-ping', {
rabbitmq.publishTask('canary.network-ping', {
targetDockerUrl: network.dockerUrl,
targetIps: network.ips,
targetOrg: network._id,
Expand Down
4 changes: 2 additions & 2 deletions lib/tasks/canary/network/ping.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class NetworkOrgCanary extends CanaryBase {
this.job = job
this.gauge = 'canary.network-ping'
this.name = 'Network Canary'
this.queue = 'khronos:canary:network-ping'
this.queue = 'canary.network-ping'
this.log = this.log.child({
job: this.job,
task: this.queue
Expand Down Expand Up @@ -172,7 +172,7 @@ class NetworkOrgCanary extends CanaryBase {
dockerHost: this.job.targetDockerUrl,
containerId: pingContainer.id
}, 'Enqueueing container delete')
const targetQueue = 'khronos:containers:delete'
const targetQueue = 'containers.delete'
rabbitmq.publishTask(targetQueue, {
dockerHost: this.job.targetDockerUrl,
containerId: pingContainer.id
Expand Down
6 changes: 1 addition & 5 deletions lib/tasks/containers/check-against-mongo.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ module.exports = function (job) {
if (!result || (Array.isArray(result) && result.length === 0)) {
// TODO(bryan): remove the container.
log.debug('Removing container')
rabbitmq.publishTask('khronos:containers:remove', job)
rabbitmq.publishTask('containers.remove', job)
return assign({}, job, { containerRemoveTaskQueued: true })
} else {
// it exists in mongo on an Instance, don't remove it
Expand All @@ -54,8 +54,4 @@ module.exports = function (job) {
})
}
})
.catch(function (err) {
log.error({ err: err }, 'Error deleting container')
throw err
})
}
14 changes: 4 additions & 10 deletions lib/tasks/containers/prune-orphans-dock.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@
*/
'use strict'

// internal
var enqueueContainerJobsHelper = require('tasks/utils/enqueue-container-jobs')
var log = require('logger').getChild(__filename)
const enqueueContainerJobsHelper = require('tasks/utils/enqueue-container-jobs')

var IMAGE_FILTERS = [
const IMAGE_FILTERS = [
new RegExp('^' + process.env.KHRONOS_DOCKER_REGISTRY_REGEX +
'\/[0-9]+\/[A-z0-9]+:[A-z0-9]+'),
/^[A-z0-9]{12}$/ // TODO(bryan): was this initially for build containers?
Expand All @@ -22,14 +20,10 @@ var IMAGE_FILTERS = [
* @return {promise} Resolved when all tasks enqueued to verify containers.
*/
module.exports = function (job) {
var options = {
const options = {
job: job,
targetQueue: 'khronos:containers:orphan:check-against-mongo',
targetQueue: 'containers.orphan.check-against-mongo',
imageBlacklist: IMAGE_FILTERS
}
return enqueueContainerJobsHelper(options)
.catch(function (err) {
log.error({ err: err }, '.dockTask error')
throw err
})
}
12 changes: 3 additions & 9 deletions lib/tasks/containers/prune-orphans.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,12 @@
*/
'use strict'

// internal
var enqueueDockJobsHelper = require('tasks/utils/enqueue-dock-jobs')
var log = require('logger').getChild(__filename)
const enqueueDockJobsHelper = require('tasks/utils/enqueue-dock-jobs')

/**
* Task that enqueues a prune-dock job for every dock in Mavis.
* Task that enqueues a prune-dock job for every dock in Swarm.
* @return {promise} Resolved when all jobs have been enqueued.
*/
module.exports = function () {
return enqueueDockJobsHelper('khronos:containers:orphan:prune-dock')
.catch(function (err) {
log.error({ err: err }, '.task error')
throw err
})
return enqueueDockJobsHelper('containers.orphan.prune-dock')
}
Loading