Skip to content
Snippets Groups Projects
Commit acd5ba3b authored by Kevin S. Hahn's avatar Kevin S. Hahn
Browse files

Merge branch 'no_config_file'

parents 9e5aae0e fee48fa7
No related branches found
No related tags found
No related merge requests found
......@@ -106,41 +106,42 @@ app.config = {
if __name__ == '__main__':
import pymongo
import argparse
import ConfigParser
import paste.httpserver
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('config_file', help='path to config file')
arg_parser.add_argument('--host', default='127.0.0.1', help='IP address to bind to')
arg_parser.add_argument('--port', default='8080', help='TCP port to listen on')
arg_parser.add_argument('--db_uri', help='NIMS DB URI')
arg_parser.add_argument('--data_path', help='path to storage area')
arg_parser.add_argument('--log_path', help='path to API log file')
arg_parser.add_argument('--ssl_cert', help='path to SSL certificate file, containing private key and certificate chain')
arg_parser.add_argument('--site_id', help='InterNIMS site ID')
arg_parser.add_argument('--site_name', help='InterNIMS site name')
arg_parser.add_argument('--oauth2_id_endpoint', help='OAuth2 provider ID endpoint')
arg_parser.add_argument('--demo', help='demo mode, enables auto user creation')
arg_parser.add_argument('--db_uri', help='NIMS DB URI', required=True)
arg_parser.add_argument('--data_path', help='path to storage area', required=True)
arg_parser.add_argument('--log_path', help='path to API log file', required=True)
arg_parser.add_argument('--ssl_cert', help='path to SSL certificate file, containing private key and certificate chain', required=True)
arg_parser.add_argument('--site_id', help='site ID for Scitran Central')
arg_parser.add_argument('--site_name', help='site name for Scitran Central', nargs='+')
arg_parser.add_argument('--oauth2_id_endpoint', help='OAuth2 provider ID endpoint', default='https://www.googleapis.com/plus/v1/people/me/openIdConnect')
arg_parser.add_argument('--demo', help='demo mode, enables auto user creation', action='store_true', default=False)
arg_parser.add_argument('--insecure', help='insecure mode, allow user info as urlencoded param', action='store_true', default=False)
arg_parser.add_argument('--log_level', help='log level [info]', default='info')
args = arg_parser.parse_args()
args.site_name = ' '.join(args.site_name) if args.site_name else None # site_name as string
app.config['here'] = os.path.dirname(os.path.abspath(args.config_file))
config = ConfigParser.ConfigParser(app.config)
config.read(args.config_file)
logging.config.fileConfig(args.config_file, disable_existing_loggers=False)
logging.basicConfig()
logging.getLogger('paste.httpserver').setLevel(logging.INFO) # silence paste logging
app.config['site_id'] = args.site_id or app.config['site_id']
app.config['site_name'] = args.site_name or app.config['site_name']
app.config['data_path'] = os.path.join(args.data_path or config.get('nims', 'data_path'), 'nims')
app.config['quarantine_path'] = os.path.join(args.data_path or config.get('nims', 'data_path'), 'quarantine')
app.config['log_path'] = args.log_path or app.config['log_path']
app.config['oauth2_id_endpoint'] = args.oauth2_id_endpoint or config.get('oauth2', 'id_endpoint')
app.config['insecure'] = config.getboolean('nims', 'insecure')
app.config['ssl_cert'] = args.ssl_cert or config.get('nims', 'ssl_cert') # to give to requests
app.config['demo'] = arg.demo or config.getboolean('nims', 'demo')
log.setLevel(getattr(logging, args.log_level.upper()))
app.config['site_id'] = args.site_id
app.config['site_name'] = args.site_name
app.config['data_path'] = os.path.join(args.data_path, 'nims')
app.config['quarantine_path'] = os.path.join(args.data_path, 'quarantine')
app.config['log_path'] = args.log_path
app.config['oauth2_id_endpoint'] = args.oauth2_id_endpoint
app.config['insecure'] = args.insecure
app.config['ssl_cert'] = args.ssl_cert
app.config['demo'] = args.demo
if not app.config['ssl_cert']:
log.warning('SSL certificate not specified, interNIMS functionality disabled')
elif not app.config['site_id']:
log.warning('site_id not configured, interNIMS functionality disabled')
if not os.path.exists(app.config['data_path']):
os.makedirs(app.config['data_path'])
......@@ -148,8 +149,7 @@ if __name__ == '__main__':
os.makedirs(app.config['quarantine_path'])
kwargs = dict(tz_aware=True)
db_uri = args.db_uri or config.get('nims', 'db_uri')
db_client = pymongo.MongoReplicaSetClient(db_uri, **kwargs) if 'replicaSet' in db_uri else pymongo.MongoClient(db_uri, **kwargs)
db_client = pymongo.MongoReplicaSetClient(args.db_uri, **kwargs) if 'replicaSet' in args.db_uri else pymongo.MongoClient(args.db_uri, **kwargs)
app.db = db_client.get_default_database()
app.debug = True # send stack trace for uncaught exceptions to client
......
# @author: Gunnar Schaefer, Kevin S. Hahn
import os
import sys
import site
import time
import logging
import pymongo
import argparse
import uwsgidecorators
import ConfigParser
configfile = '/service/config/production.ini'
config = ConfigParser.ConfigParser(allow_no_value=True)
config.read(configfile)
import api
import internimsclient
site.addsitedir(os.path.join(config.get('nims', 'virtualenv'), 'lib/python2.7/site-packages'))
sys.path.append(config.get('nims', 'here'))
os.environ['PYTHON_EGG_CACHE'] = config.get('nims', 'python_egg_cache')
os.environ['PYTHON_EGG_CACHE'] = '/tmp/python_egg_cache'
os.umask(0o022)
import pymongo
import uwsgidecorators
ap = argparse.ArgumentParser()
ap.add_argument('--db_uri', help='mongodb uri', required=True)
ap.add_argument('--data_path', help='path to data', required=True)
ap.add_argument('--log_path', help='path to log', required=True) # for SHOWING the log, not where to write
ap.add_argument('--ssl_cert', help='path to ssl cert in pem format, key+cert', required=True)
ap.add_argument('--api_uri', help='api uri')
ap.add_argument('--site_id', help='site id')
ap.add_argument('--site_name', help='site name', nargs='+')
ap.add_argument('--oauth2_id_endpoint', help='oauth2 id endpoint url', default='https://www.googleapis.com/plus/v1/people/me/openIdConnect')
ap.add_argument('--demo', help='demo mode, enables auto user creation', action='store_true', default=False)
ap.add_argument('--insecure', help='insecure mode', action='store_true', default=False)
ap.add_argument('--central_uri', help='scitran central api', default='https://sdmc.scitran.io/api')
ap.add_argument('--log_level', help='log level [info]', default='info')
args = ap.parse_args()
args.site_name = ' '.join(args.site_name) if args.site_name else None # site_name as string
import logging
import logging.config
logging.config.fileConfig(configfile, disable_existing_loggers=False)
logging.basicConfig(level=getattr(logging, args.log_level.upper()))
log = logging.getLogger('nimsapi')
import api
import internimsclient
# configure uwsgi application
application = api.app
application.config['data_path'] = os.path.join(config.get('nims', 'data_path'), 'nims')
application.config['quarantine_path'] = os.path.join(config.get('nims', 'data_path'), 'quarantine')
application.config['log_path'] = config.get('nims', 'log_path')
application.config['site_name'] = config.get('nims', 'site_name')
application.config['site_id'] = config.get('nims', 'site_id')
application.config['ssl_cert'] = config.get('nims', 'ssl_cert')
application.config['oauth2_id_endpoint'] = config.get('oauth2', 'id_endpoint')
application.config['insecure'] = config.getboolean('nims', 'insecure')
application.config['demo'] = config.getboolean('nims', 'demo')
application.config['site_id'] = args.site_id
application.config['site_name'] = args.site_name
application.config['data_path'] = os.path.join(args.data_path, 'nims')
application.config['quarantine_path'] = os.path.join(args.data_path, 'quarantine')
application.config['log_path'] = args.log_path
application.config['ssl_cert'] = args.ssl_cert
application.config['oauth2_id_endpoint'] = args.oauth2_id_endpoint
application.config['insecure'] = args.insecure
application.config['demo'] = args.demo
if not os.path.exists(application.config['data_path']):
os.makedirs(application.config['data_path'])
......@@ -46,13 +51,10 @@ if not os.path.exists(application.config['quarantine_path']):
# connect to db
kwargs = dict(tz_aware=True)
db_uri = config.get('nims', 'db_uri')
db_client = None
application.db = None
for x in range(0, 30):
try:
db_client = pymongo.MongoReplicaSetClient(db_uri, **kwargs) if 'replicaSet' in db_uri else pymongo.MongoClient(db_uri, **kwargs)
db_client = pymongo.MongoReplicaSetClient(args.db_uri, **kwargs) if 'replicaSet' in args.db_uri else pymongo.MongoClient(args.db_uri, **kwargs)
application.db = db_client.get_default_database()
except:
time.sleep(1)
......@@ -60,27 +62,25 @@ for x in range(0, 30):
else:
break
else:
raise Exception("Could not connect to MongoDB")
raise Exception('Could not connect to MongoDB')
# internims, send is-alive signals
site_id = config.get('nims', 'site_id')
site_name = config.get('nims', 'site_name')
ssl_cert = config.get('nims', 'ssl_cert')
api_uri = config.get('nims', 'api_uri')
try:
internims_url = config.get('nims', 'internims_url')
except ConfigParser.NoOptionError:
internims_url = None
fail_count = 0
if not internims_url or internims_url == u'':
log.debug('internims url not configured. internims disabled.')
if not args.ssl_cert:
log.warning('SSL certificate not specified, Scitran Central functionality disabled')
elif not args.api_uri:
log.warning('api_uri not configured. scitran central functionality disabled.')
elif not args.site_name:
log.warning('site_name not configured. scitran central functionality disabled.')
elif not args.site_id:
log.warning('site_id not configured. scitran central functionality disabled.')
elif not args.central_uri:
log.warning('central_uri not configured. scitran central functionality disabled.')
else:
fail_count = 0
@uwsgidecorators.timer(60)
def internimsclient_timer(signum):
global fail_count
if not internimsclient.update(application.db, api_uri, site_name, site_id, ssl_cert, internims_url):
if not internimsclient.update(application.db, args.api_uri, args.site_name, args.site_id, args.ssl_cert, args.central_uri):
fail_count += 1
else:
fail_count = 0
......
......@@ -11,6 +11,7 @@ local users are permitted to access data in other instances.
import logging
import logging.config
logging.basicConfig()
log = logging.getLogger('internims')
logging.getLogger('requests').setLevel(logging.WARNING) # silence Requests library logging
......@@ -81,42 +82,31 @@ def clean_remotes(db):
if __name__ == '__main__':
import os
import time
import pymongo
import argparse
import ConfigParser
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('configfile', help='path to configuration file')
arg_parser.add_argument('--internims_url', help='https://internims.appspot.com')
arg_parser.add_argument('--db_uri', help='DB URI')
arg_parser.add_argument('--api_uri', help='API URL, without http:// or https://')
arg_parser.add_argument('--site_id', help='instance hostname (used as unique ID)')
arg_parser.add_argument('--site_name', help='instance name')
arg_parser.add_argument('--internims_url', help='Scitran Central API URL', default='https://sdmc.scitran.io')
arg_parser.add_argument('--db_uri', help='DB URI', required=True)
arg_parser.add_argument('--api_uri', help='API URL, without http:// or https://', required=True)
arg_parser.add_argument('--site_id', help='instance hostname (used as unique ID)', required=True)
arg_parser.add_argument('--site_name', help='instance name', nargs='+', required=True)
arg_parser.add_argument('--ssl_cert', help='path to server ssl certificate file', required=True)
arg_parser.add_argument('--sleeptime', default=60, type=int, help='time to sleep between is alive signals')
arg_parser.add_argument('--ssl_cert', help='path to server ssl certificate file')
arg_parser.add_argument('--debug', help='enable default mode', action='store_true', default=False)
arg_parser.add_argument('--log_level', help='log level [info]', default='info')
args = arg_parser.parse_args()
args.site_name = ' '.join(args.site_name) if args.site_name else None # site_name as string
config = ConfigParser.ConfigParser({'here': os.path.dirname(os.path.abspath(args.configfile))})
config.read(args.configfile)
logging.config.fileConfig(args.configfile, disable_existing_loggers=False)
logging.basicConfig()
log.setLevel(getattr(logging, args.log_level.upper()))
ssl_cert = args.ssl_cert or config.get('nims', 'ssl_cert')
db = (pymongo.MongoReplicaSetClient(args.db_uri) if 'replicaSet' in args.db_uri else pymongo.MongoClient(args.db_uri)).get_default_database()
db_uri = args.db_uri or config.get('nims', 'db_uri')
db = (pymongo.MongoReplicaSetClient(db_uri) if 'replicaSet' in db_uri else pymongo.MongoClient(db_uri)).get_default_database()
site_name = args.site_name or config.get('nims', 'site_name')
site_id = args.site_id or config.get('nims', 'site_id')
api_uri = args.api_uri or config.get('nims', 'api_uri')
internims_url = args.internims_url or config.get('nims', 'internims_url')
debug = args.debug or config.get('nims', 'insecure')
fail_count = 0
while True:
if not update(db, api_uri, site_name, site_id, ssl_cert, internims_url):
if not update(db, args.api_uri, args.site_name, args.site_id, args.ssl_cert, args.internims_url):
fail_count += 1
else:
fail_count = 0
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment