balena-supervisor/src/db.coffee

114 lines
3.0 KiB
CoffeeScript
Raw Normal View History

Promise = require 'bluebird'
2014-03-19 19:17:07 +00:00
Knex = require 'knex'
2016-10-10 21:14:31 +00:00
knex = Knex(
client: 'sqlite3'
connection:
2014-04-27 21:41:59 +00:00
filename: '/data/database.sqlite'
useNullAsDefault: true
)
addColumn = (table, column, type) ->
knex.schema.hasColumn(table, column)
.then (exists) ->
if not exists
knex.schema.table table, (t) ->
t[type](column)
knex.init = Promise.all([
2014-03-19 19:17:07 +00:00
knex.schema.hasTable('config')
.then (exists) ->
if not exists
2014-03-19 19:17:07 +00:00
knex.schema.createTable 'config', (t) ->
t.string('key').primary()
t.string('value')
2014-03-19 19:17:07 +00:00
knex.schema.hasTable('deviceConfig')
.then (exists) ->
if not exists
knex.schema.createTable 'deviceConfig', (t) ->
t.json('values')
t.json('targetValues')
.then ->
knex('deviceConfig').select()
.then (deviceConfigs) ->
knex('deviceConfig').insert({ values: '{}', targetValues: '{}' }) if deviceConfigs.length == 0
2014-03-19 19:17:07 +00:00
knex.schema.hasTable('app')
.then (exists) ->
if not exists
2014-03-19 19:17:07 +00:00
knex.schema.createTable 'app', (t) ->
t.increments('id').primary()
t.string('name')
t.string('containerName')
t.string('commit')
t.string('imageId')
t.string('appId')
t.boolean('privileged')
t.json('env')
t.json('config')
t.boolean('markedForDeletion')
else
Promise.all [
addColumn('app', 'commit', 'string')
addColumn('app', 'appId', 'string')
addColumn('app', 'containerName', 'string')
addColumn('app', 'config', 'json')
addColumn('app', 'markedForDeletion', 'boolean')
]
.then ->
# When updating from older supervisors, config can be null
knex('app').update({ config: '{}' }).whereNull('config')
.then ->
knex('app').update({ markedForDeletion: false }).whereNull('markedForDeletion')
knex.schema.hasTable('dependentApp')
.then (exists) ->
if not exists
knex.schema.createTable 'dependentApp', (t) ->
t.increments('id').primary()
t.string('appId')
t.string('parentAppId')
t.string('name')
t.string('commit')
t.string('imageId')
t.json('config')
t.json('environment')
2017-06-13 08:38:16 +00:00
else
addColumn('dependentApp', 'environment', 'json')
knex.schema.hasTable('dependentDevice')
.then (exists) ->
if not exists
knex.schema.createTable 'dependentDevice', (t) ->
t.increments('id').primary()
t.string('uuid')
t.string('appId')
t.string('localId')
t.string('device_type')
t.string('logs_channel')
t.string('deviceId')
t.boolean('is_online')
t.string('name')
t.string('status')
t.string('download_progress')
t.string('is_managed_by')
t.dateTime('lock_expiry_date')
t.string('commit')
t.string('targetCommit')
t.json('environment')
t.json('targetEnvironment')
t.json('config')
t.json('targetConfig')
t.boolean('markedForDeletion')
else
2017-06-13 08:38:16 +00:00
Promise.all [
addColumn('dependentDevice', 'markedForDeletion', 'boolean')
addColumn('dependentDevice', 'localId', 'string')
addColumn('dependentDevice', 'is_managed_by', 'string')
addColumn('dependentDevice', 'lock_expiry_date', 'dateTime')
]
])
module.exports = knex