#!/usr/bin/env node
var debug = require('debug')('admportal');
var app = require('../server/app');
var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json');
var out_file = "/opt/openecomp/sdnc/admportal/logs/http_admportal.log";
var error_file = "/opt/openecomp/sdnc/admportal/logs/error_http_admportal.log";
var cwd = "/opt/openecomp/sdnc/admportal";

app.set('port', properties.nonSslPort || 8181 );

var server = app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + server.address().port);
  debug('Express server listening on port ' + server.address().port);
});
