Reorganized code to be used externally

Daniel Machancoses Daniel Machancoses 2016-12-05

added scripts/build.sh
removed bundle
removed bundle/components
removed bundle/components/jobexfe
removed bundle/components/jobexfe/code
removed bundle/components/jobexfe/code/src
removed bundle/components/jobexfe/code/src/src
removed bundle/components/jobexfe/code/Manifest.json
removed bundle/components/jobexfe/Manifest.json
removed bundle/deployment
removed bundle/deployment/Manifest1.json
removed bundle/deployment/Manifest2.json
removed bundle/service
removed bundle/service/Manifest1.json
removed bundle/service/Manifest2.json
changed scripts/bundle-functions.sh
changed scripts/deploy_local_stamp.sh
changed scripts/rezip.sh
copied bundle/components/jobexfe/code/src/src/JobexFE.coffee -> service/Manifest.json
copied bundle/components/jobexfe/code/src/package.json -> deployment/Manifest.json
scripts/build.sh Diff Switch to side-by-side view
Loading...
bundle
File was removed.
bundle/components
File was removed.
bundle/components/jobexfe
File was removed.
bundle/components/jobexfe/code
File was removed.
bundle/deployment
File was removed.
bundle/service
File was removed.
bundle/service/Manifest1.json
File was removed.
bundle/service/Manifest2.json
File was removed.
scripts/bundle-functions.sh Diff Switch to side-by-side view
Loading...
scripts/deploy_local_stamp.sh Diff Switch to side-by-side view
Loading...
scripts/rezip.sh Diff Switch to side-by-side view
Loading...
bundle/components/jobexfe/code/src/src/JobexFE.coffee to service/Manifest.json
--- a/bundle/components/jobexfe/code/src/src/JobexFE.coffee
+++ b/service/Manifest.json
@@ -1,341 +1,416 @@
-Component = require "component"
-http = require 'http-message'
-
-util = require 'util'
-express = require 'express'
-bodyParser = require 'body-parser'
-path = require 'path'
-q = require 'q'
-
-url = require 'url'
-
-class ModuleFE extends Component
-
-  # Constructor
-  # Same parameters as Component.
-  #
-  constructor: (@runtime, @role, @iid, @incnum, @localData, @resources, @parameters, @requires, @provides) ->
-    @runtime.setLogger [ModuleFE]
-    super
-
-    @optServiceChannel = null
-    @jobsApiChannel = null
-    @jobNotificationServiceChannel = null
-
-    @taskExecutorChannel = null
-
-    #Front End specific properties
-    @app = null
-    @router = null
-    @path = '/opc'
-
-    @logger.info "constructor completed"
-
-  setupChannels: () =>
-    @logger.info "setupChannels()"
-    @logger.info 'provides : ', Object.keys(@provides)
-    @logger.info 'requires: ', Object.keys(@requires)
-
-    @optServiceChannel = @provides['optServiceChannel']
-    @logger.info "setupChannels initialized #{util.inspect(@optServiceChannel)}"
-
-    @jobsApiChannel = @requires['jobsApi']
-    @taskApiChannel = @requires['taskApi']
-    @jobNotificationChannel = @requires['jobNotificationReceive']
-
-    @jobNotificationChannel.on 'message', @onJobNotification
-
-    cfg = if @optServiceChannel.config? then @optServiceChannel.config else {}
-    cfg.timeout = 500000
-    @optServiceChannel.setConfig cfg
-
-    cfg = if @jobsApiChannel.config? then @jobsApiChannel.config else {}
-    cfg.timeout = 240000
-    @jobsApiChannel.setConfig cfg
-
-    cfg = if @taskApiChannel.config? then @taskApiChannel.config else {}
-    cfg.timeout = 240000
-    @taskApiChannel.setConfig cfg
-
-    @logger.info "setupChannels() completed"
-
-  ###
-    Starts the execution
-  ###
-  run: () =>
-    @logger.info "run()"
-    super
-
-    @setupChannels()
-
-    @initRouter()
-
-    @startExpress()
-    #@startHttpServer()
-
-    @logger.info "run() completed"
-
-
-  ###
-    Start httpServer
-  ###
-#startHttpServer: () =>
-#  @logger.info 'startHttpServer'
-#  @httpServer = http.createServer()
-#  @httpServer.on 'request', @onHttpRequest
-#  @httpServer.on 'error', @onHttpError
-#  @httpServer.listen @optServiceChannel
-
-  ###
-    Receive and process new http requests
-  ###
-#onHttpRequest: (request, response) =>
-#  pathname = url.parse(request.url).pathname
-#  if (pathname is "/opc")
-#    postData = ""
-#
-#    request.on "data", (chunk) =>
-#      @logger.info "onHttpRequest onData"
-#      postData = postData + chunk
-#
-#    request.on "end", () =>
-#      message = JSON.parse postData
-#      @logger.info "onHttpRequest onEnd. Data = #{message}"
-#
-#      @handleRequest(message, response)
-#
-#  else
-#    msg =
-#      success: false
-#      message: "Invalid resource #{pathname}"
-#    @sendResponse(response, msg, 400)
-
-  handleRequest: (msg, res) =>
-    @logger.info "handleRequest() OK"
-    msg.success = true
-    @sendResponse(res, msg)
-  ###
-     Event listener for HTTP server "error" event.
-  ###
-
-  onHttpError: (error) =>
-    @logger.info "Cfe:onHttpServerError"
-    unless (error.syscall is 'listen') then throw error
-    switch error.code
-      when "EACCES"
-        @logger.info 'Cfe:onHttpServerError: port requires elevated \
-                      privileges'
-      when "EADDRINUSE"
-        @logger.info 'Cfe:onHttpServerError: port is already in use'
-    throw error
-
-  ###
-    Configure Router
-  ###
-  initRouter: () =>
-    @logger.info "initRouter()"
-
-    @router = express.Router()
-    @router.get '/jobsApi', @jobsApi
-    @router.get '/taskApi', @taskApi
-    @router.get '/ping', @ping
-    ###@router.get '/api', @getApi###
-
-    @logger.info "initRouter() completed"
-
-  ###
-    Check if component is up
-  ###
-  ping: (req, rep) =>
-    @logger.info "ping()"
-    response =
-      success: true
-      message: 'PONG'
-    @sendResponse rep, response
-
-  ###
-    Returns description of the Task Executor Front-End API
-  ###
-  ###getApi: (req, res) =>
-    @logger.info 'getApi()'
-    message =
-      success: true
-      response: [
-        {
-          url: 'PUT/jobsApi'
-          description: 'Redirects call to job component'
-          form:
-            action: "action"
-            params:
-              param1: 'param1'
-              param2: 'param2'
-              param3: 'param3'
-          example:
-            action: "execute"
-            form:
-              idPlan: 'idPlan'
-              idAlgorithm: 'idAlgorithm'
-          default:
-            ipserver: '192.168.183.60'
-            user: 'user'
-            password: 'c2net'
-            db: 'MSQh2dp1hc0r0_001_STables'
-        }
-        {
-          url: 'PUT/taskApi'
-          description: 'Redirects call to job component'
-          form:
-            action: "action"
-            params:
-              param1: 'param1'
-              param2: 'param2'
-              param3: 'param3'
-          example:
-            form:
-              action: "action"
-              params:
-                idPlan: 'idPlan'
-                idAlgorithm: 'idAlgorithm'
-        }
-        {
-          url: 'GET/taskExecutor/ping'
-          action: "ping"
-          description: 'Checks component is alive '
-        }
-        {
-          url: 'GET/taskExecutor/api'
-          action: "api"
-          description: 'Returns description of the JobsEX Front-End API'
-        }
-      ]
-    @sendResponse res, message###
-
-  ###
-    Forwards call to Jobs
-  ###
-  jobsApi: (req, rep) =>
-    @logger.info "jobsApi() invoked"
-
-    msgString = JSON.stringify(req.query)
-    @logger.info "jobsApi() msgString # #{msgString}"
-
-    @jobsApiChannel.sendRequest msgString
-
-    .then (response) =>
-      message = JSON.parse(response.message.toString())
-      @logger.info "jobsApi() completed: #{util.inspect(message)}"
-      @sendResponse rep, message
-
-    .fail (err) =>
-      @logger.error "jobsApi() error #{err.message}"
-      @sendError rep, err.message
-
-  ###
-    Forwards call to Task Executor
-  ###
-  taskApi: (req, rep) =>
-    @logger.info "taskApi() started"
-
-    msgString = JSON.stringify(req.query)
-    @logger.info "taskApi() msg : #{msgString}"
-
-    @taskApiChannel.sendRequest msgString
-
-    .then (response) =>
-      @logger.info "taskApi() response received"
-      #[ [ { status: 'OK' }, <Buffer 7b 22 6d ... > ], null ]
-      message = JSON.parse(response.message.toString())
-      @logger.info "taskApi() completed #{util.inspect(message)}"
-      @sendResponse rep, message
-
-    .fail (err) =>
-      @logger.error "taskApi() error #{err.message}"
-      @sendError rep, err.message
-
-  ###
-    A new job notification message has been published.
-  ###
-  onJobNotification: (buffer) =>
-
-    @logger.info "onJobNotification()"
-    message = JSON.parse(buffer)
-    @logger.info "onJobNotification() message received:\n #{util.inspect message}"
-    if message.response?.job?.result
-      @logger.info "onJobNotification() result: \n#{util.inspect message.response.job.result}"
-
-  ###
-    Sends notification to Jobs
-  ###
-  sendNotification: (message) =>
-    @logger.info "sendNotificationToJobs() #{util.inspect(message)}"
-
-  ###
-    Configure express
-  ###
-  startExpress: () =>
-    @logger.info 'startExpress'
-    @app = express()
-    @app.use bodyParser.json()
-    @app.use bodyParser.urlencoded({extended: true})
-
-    # express routes
-    @app.use @path, @router
-    @logger.info "startExpress() app in path #{@path}"
-
-    @app.use (req, res, next) ->
-      return res.status(404).send('URL Not Found')
-
-    @httpServer = http.createServer(@app)
-    @httpServer.on 'error', @_onHttpError
-    @httpServer.listen @optServiceChannel
-
-    @logger.info "startExpress() completed"
-
-  ###
-    Saves the state and stops the execution.
-  ###
-  shutdown: ->
-    super()
-    @logger.info "shutdown()"
-
-  ###
-    Changes the component instance parameters
-    Returns: 'true' if the reconfig can be take and 'false' otherwise.
-  ###
-  reconfig: (resources, parameters) ->
-    @logger.info "reconfig()"
-    result = super parameters
-    return result
-
-  sendError: (res, msg) =>
-    res.writeHead 500, {"Content-type": "application/json"}
-    res.write msg
-    res.end()
-    @logger.error "sendError() #{util.inspect(msg)}"
-    @sendResponse(res, msg, 500)
-
-  sendResponse: (res, msg) =>
-    res.writeHead 200, {"Content-type": "application/json"}
-    res.write JSON.stringify msg
-    res.end()
-    @logger.info "sendResponse() #{util.inspect(msg)}"
-
-  ###
-    Event listener for HTTP server "error" event.
-  ###
-  _onHttpError: (error) =>
-    @logger.error 'Cfe:onHttpError'
-    throw error unless (error.syscall is 'listen')
-    switch error.code
-      when 'EACCES'
-        @logger.error 'Cfe:onHttpError: requires elevated privileges'
-      when 'EADDRINUSE'
-        @logger.error 'Cfe:onHttpError: address is already in use'
-      else
-        @logger.error "Cfe:onHttpError: code = #{error.code}"
-    throw error
-
-module.exports = ModuleFE
-
-## Patch for unit-tests: use ports instead of channels
-module.exports.useNativeHttp = () -> http = require 'http'+{
+  "spec": "http://eslap.cloud/manifest/service/1_0_0",
+  "name": "eslap://c2net/services/demo/december/0_0_1",
+  "configuration": {
+    "resources": [],
+    "parameters": [
+      {
+        "name": "acs",
+        "type": "eslap://eslap.cloud/parameter/json/1_0_0"
+      },
+      {
+        "name": "dssql",
+        "type": "eslap://eslap.cloud/parameter/json/1_0_0"
+      },
+      {
+        "name": "mariadbwrapper",
+        "type": "eslap://eslap.cloud/parameter/json/1_0_0"
+      },
+      {
+        "name": "taskexecutor",
+        "type": "eslap://eslap.cloud/parameter/json/1_0_0"
+      },
+      {
+        "name": "solver",
+        "type": "eslap://eslap.cloud/parameter/json/1_0_0"
+      }
+    ]
+  },
+  "roles": [
+    {
+      "name": "acs",
+      "component": "eslap://iti/components/acs/0_0_118"
+    },
+    {
+      "name": "cnm",
+      "component": "eslap://ikerlan/components/cnm/0_0_115"
+    },
+    {
+      "name": "dkms",
+      "component": "eslap://uninova.c2netproject.eu/components/dkms/0_0_1"
+    },
+    {
+      "name": "dssql",
+      "component": "eslap://iti/components/dssql/0_0_129"
+    },
+    {
+      "name": "feacsdssql",
+      "component": "eslap://iti/components/feacsdssql/0_0_118"
+    },
+    {
+      "name": "mariadbwrapper",
+      "component": "eslap://iti/components/mariadbwrapper/0_0_119"
+    },
+    {
+      "name": "opt",
+      "component": "eslap://cms.c2net/components/opc/0_0_2"
+    },
+    {
+      "name": "jobexfe",
+      "component": "eslap://iti/components/jobexfe/0_0_1"
+    },
+    {
+      "name": "pomam",
+      "component": "eslap://cms.c2net/components/pomam/0_0_2"
+    },
+    {
+      "name": "pubsub",
+      "component": "eslap://atos.c2net/components/pubsub/1_0_0"
+    },
+    {
+      "name": "rm",
+      "component": "eslap://atos.c2net/components/rm/1_0_0"
+    },
+    {
+      "name": "solver",
+      "component": "eslap://cigip/components/solvermanager/0_0_1"
+    },
+    {
+      "name": "jobs",
+      "component": "eslap://iti/components/jobs/0_0_3"
+    },
+    {
+      "name": "taskexecutor",
+      "component": "eslap://iti/components/taskexecutor/0_0_3"
+    }
+  ],
+  "channels": {
+    "provides": [
+      {
+        "name": "acsdsqlService",
+        "type": "eslap://eslap.cloud/channel/reply/1_0_0",
+        "protocol": "eslap://eslap.cloud/protocol/message/http/1_0_0"
+      },
+      {
+        "name": "jobexService",
+        "type": "eslap://eslap.cloud/channel/reply/1_0_0",
+        "protocol": "eslap://eslap.cloud/protocol/message/http/1_0_0"
+      },
+      {
+        "name": "pubsub",
+        "type": "eslap://eslap.cloud/channel/reply/1_0_0",
+        "protocol": "eslap://eslap.cloud/protocol/message/http/1_0_0"
+      }
+    ],
+    "requires": []
+  },
+  "connectors": [
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "endpoint": "jobexService"
+        }
+      ],
+      "provided": [
+        {
+          "role": "jobexfe",
+          "endpoint": "optServiceChannel"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "jobexfe",
+          "endpoint": "jobsApi"
+        }
+      ],
+      "provided": [
+        {
+          "role": "jobs",
+          "endpoint": "jobsService"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "jobexfe",
+          "endpoint": "taskApi"
+        },
+        {
+          "role": "jobs",
+          "endpoint": "taskRequest"
+        }
+      ],
+      "provided": [
+        {
+          "role": "taskexecutor",
+          "endpoint": "taskService"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/pubsub/1_0_0",
+      "depended": [
+        {
+          "role": "jobexfe",
+          "endpoint": "jobNotificationReceive"
+        }
+      ],
+      "provided": [
+        {
+          "role": "jobs",
+          "endpoint": "jobNotificationSend"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "opt",
+          "endpoint": "storageopc"
+        },
+        {
+          "role": "pomam",
+          "endpoint": "storage"
+        },
+        {
+          "role": "solver",
+          "endpoint": "storage"
+        }
+      ],
+      "provided": [
+        {
+          "role": "dkms",
+          "endpoint": "api"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "dssql",
+          "endpoint": "req_dssql2mdbw"
+        },
+        {
+          "role": "taskexecutor",
+          "endpoint": "maria_wrapper"
+        }
+      ],
+      "provided": [
+        {
+          "role": "mariadbwrapper",
+          "endpoint": "rep_mdbw2dssql"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [{
+        "role": "dssql",
+        "endpoint": "req_mariadbwrapper"
+      }],
+      "provided": [{
+        "role": "mariadbwrapper",
+        "endpoint": "rep_mariadbwrapper"
+      }]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "taskexecutor",
+          "endpoint": "maria_sql"
+        }
+      ],
+      "provided": [
+        {
+          "role": "dssql",
+          "endpoint": "rep_dssql_sql"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "acs",
+          "endpoint": "req_acs2dssql"
+        },
+        {
+          "role": "feacsdssql",
+          "endpoint": "req_fe2dssql"
+        }
+      ],
+      "provided": [
+        {
+          "role": "dssql",
+          "endpoint": "rep_dssql2acs_ops"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "cnm",
+          "endpoint": "sql"
+        },
+        {
+          "role": "solver",
+          "endpoint": "storage"
+        },
+        {
+          "role": "dkms",
+          "endpoint": "dssql"
+        }
+      ],
+      "provided": [
+        {
+          "role": "dssql",
+          "endpoint": "rep_dssql2fe_ops"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "cnm",
+          "endpoint": "acs"
+        },
+        {
+          "role": "feacsdssql",
+          "endpoint": "req_fe2acs"
+        },
+        {
+          "role": "opt",
+          "endpoint": "acs"
+        }
+      ],
+      "provided": [
+        {
+          "role": "acs",
+          "endpoint": "rep_acs"
+        }
+      ]
+    },
+    {
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "endpoint": "acsdsqlService"
+        }
+      ],
+      "provided": [
+        {
+          "role": "feacsdssql",
+          "endpoint": "sepdest"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "endpoint": "pubsub"
+        }
+      ],
+      "provided": [
+        {
+          "role": "pubsub",
+          "endpoint": "queue"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "pubsub",
+          "endpoint": "hubData"
+        }
+      ],
+      "provided": [
+        {
+          "role": "rm",
+          "endpoint": "hubData"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "rm",
+          "endpoint": "confRM"
+        }
+      ],
+      "provided": [
+        {
+          "role": "pubsub",
+          "endpoint": "confPS"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "opt",
+          "endpoint": "solvers"
+        }
+      ],
+      "provided": [
+        {
+          "role": "solver",
+          "endpoint": "solvermanagerservice"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "opt",
+          "endpoint": "pomaManager"
+        }
+      ],
+      "provided": [
+        {
+          "role": "pomam",
+          "endpoint": "pomaManager"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/loadbalancer/1_0_0",
+      "depended": [
+        {
+          "role": "pomam",
+          "endpoint": "jobsExecutor"
+        }
+      ],
+      "provided": [
+        {
+          "role": "jobs",
+          "endpoint": "jobsService"
+        }
+      ]
+    },{
+      "type": "eslap://eslap.cloud/connector/pubsub/1_0_0",
+      "depended": [
+        {
+          "role": "pomam",
+          "endpoint": "jobsNotifications"
+        }
+      ],
+      "provided": [
+        {
+          "role": "jobs",
+          "endpoint": "jobNotificationSend"
+        }
+      ]
+    }
+  ]
+}
bundle/components/jobexfe/code/src/package.json to deployment/Manifest.json
--- a/bundle/components/jobexfe/code/src/package.json
+++ b/deployment/Manifest.json
@@ -1,39 +1,187 @@
 {
-  "name": "ModuleFE",
-  "version": "0.0.1",
-  "description": "",
-  "main": "src/JobexFE",
-  "scripts": {
-    "spec": "rm -f *.js && node_modules/.bin/mocha --require coffee-coverage/register-istanbul --compilers coffee:coffee-script/register --reporter spec tests/*.test.coffee && node_modules/.bin/istanbul report text-summary lcov",
-    "clean": "if [ $(find ./ -name \"*.js\" | grep -c -v node_modules) -gt 0 ]; then rm $(find ./ -name \"*.js\" | grep -v node_modules); fi",
-    "test": "rm -f *.js && node_modules/.bin/mocha --reporter spec --compilers coffee:coffee-script/register tests/*.test.coffee",
-    "htmlcov": "./node_modules/.bin/coffeeCoverage --initfile build/init.js --exclude node_modules,.git,tests --path abbr . . && node_modules/.bin/mocha --require build/init.js --reporter html-cov --compilers coffee:coffee-script/register tests/*.test.coffee > reports/coverage.html;if [ $(find ./ -name \"*.js\" | grep -c -v node_modules) -gt 0 ]; then rm $(find ./ -name \"*.js\" | grep -v node_modules); fi",
-    "lcov": "./node_modules/.bin/coffeeCoverage --initfile build/init.js --exclude node_modules,.git,tests,fr --path relative . . && node_modules/.bin/mocha --require build/init.js --reporter mocha-lcov-reporter --compilers coffee:coffee-script/register tests/*.test.coffee > reports/lcov.aux && sed -e \"s#SF:lib#SF:$PWD/lib#g\" reports/lcov.aux > reports/lcov.info;if [ $(find ./ -name \"*.js\" | grep -c -v node_modules) -gt 0 ]; then rm $(find ./ -name \"*.js\" | grep -v node_modules); fi"
+  "spec": "http://eslap.cloud/manifest/deployment/1_0_0",
+  "servicename": "eslap://c2net/services/demo/december/0_0_1",
+  "name": "demo_december_1",
+  "configuration": {
+    "resources": {},
+    "parameters": {
+      "dssql": {
+        "proxyTcpDssql": "{\"req_dssql2mdbw\":{\"port\":3306}}",
+        "dbWatcherDelay": 15000
+      },
+      "acs": {
+        "dbWatcherDelay": 15000
+      },
+      "taskexecutor": {
+        "proxyTcpMariaWrapper": "{\"maria_wrapper\":{\"port\":3306}}"
+      },
+      "mariadbwrapper": {
+        "proxyTcpMariadbwrapper": "{\"rep_mdbw2dssql\":{\"port\":3306}}",
+        "filesToLoad": [
+          "c2net_prepare.sql",
+          "S_MRP_A_20161115121402.sql",
+          "c2net_check.sql"
+        ]
+      },
+      "solver": {
+        "dbWatcherDelay": 15000
+      }
+    }
   },
-  "author": "dmachancoses@iti.es",
-  "dependencies": {
-    "body-parser": "^1.15.2",
-    "coffee-script": "1.10.0",
-    "component": "git+ssh://git@gitlab.iti.upv.es:iti_kumori_paas/component.git#STABILITY",
-    "express": "^4.14.0",
-    "http-message": "git+ssh://git@gitlab.iti.upv.es:iti_kumori_paas/http-message.git#STABILITY",
-    "path": "^0.12.7",
-    "q": "^1.3.0",
-    "url": "^0.11.0",
-    "util": "^0.10.3"
-  },
-  "devDependencies": {
-    "coffee-coverage": "1.0.1",
-    "coffeelint": "1.12.1",
-    "istanbul": "0.4.2",
-    "mocha": "^2.2.4",
-    "rimraf": "^2.4.3",
-    "should": "^6.0.1"
-  },
-  "engines": {
-    "node": "4.2.1"
-  },
-  "os": [
-    "linux"
-  ]
+  "roles": {
+    "acs": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "cnm": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "dkms": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "dssql": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "feacsdssql": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "jobs": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "mariadbwrapper": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "opt": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "jobexfe": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "pomam": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "pubsub": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "rm": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "solver": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    },
+    "taskexecutor": {
+      "resources": {
+        "__instances": 1,
+        "__cpu": 1,
+        "__memory": 1,
+        "__ioperf": 1,
+        "__iopsintensive": false,
+        "__bandwidth": 1,
+        "__resilience": 1
+      }
+    }
+  }
 }