blob: d706c8fc63ccdb872b9d2fd678ae31fa25f9db4a [file] [log] [blame]
import tornado.httpserver
import tornado.ioloop
import tornado.web
import logging
import logging.config
import os
import configparser
import socket
import pluginhandler
class GenericHandler(tornado.web.RequestHandler):
def initialize(self, pluginName, format=None):
super(GenericHandler, self).initialize()
self._pluginHandler = pluginhandler.PluginHandler(pluginName, 'plugins', format)
@tornado.web.asynchronous
def get(self):
self._handleRequest('get')
@tornado.web.asynchronous
def post(self):
self._handleRequest('post')
@tornado.web.asynchronous
def options(self):
self._handleRequest('options')
def _handleRequest(self, httpMethod):
try:
#logging.debug("_handleRequest")
self._pluginHandler.handleRequest(httpMethod, self.request.path, self)
except BaseException as exception:
logging.exception('something is wrong with this plugin: '+str(exception))
self.set_status(404)
self.write('something is wrong with this plugin: '+str(exception))
self.finish()
class TemplateRenderHandler(tornado.web.RequestHandler):
def get(self):
self.set_header("Content-Type", "application/xml")
try:
fileName = self.request.path.split('/').pop()
self.render(fileName)
except BaseException as exception:
self.set_header("Content-Type", "text/html")
self.set_status(404)
self.write('File not found '+fileName)
if __name__ == "__main__":
#logging.basicConfig(filename="log.txt",level=logging.DEBUG)
logging.config.fileConfig(r'./logging.conf')
configuration = configparser.RawConfigParser()
configuration.read(r'./config.conf')
settings = dict(static_path=os.path.join(os.path.dirname(__file__), "static"), static_url_prefix="/static/", template_path=os.path.join(os.path.dirname(__file__), "templates"))
application = tornado.web.Application([
#(r"/dataset/.*", DatasetHandler),
(r"/heartbeat", GenericHandler, dict(pluginName='heartbeat', format=['json'])),
(r"/ws/search/samos", GenericHandler, dict(pluginName='samos', format=['json'])),
(r"/ws/search/icoads", GenericHandler, dict(pluginName='icoads', format=['json'])),
(r"/ws/search/spurs", GenericHandler, dict(pluginName='spurs', format=['json'])),
(r"/ws/search/spurs2", GenericHandler, dict(pluginName='spurs2', format=['json'])),
(r"/nexus/climatology", GenericHandler, dict(pluginName='nexus', format=['climatology'])),
(r"/nexus/solr", GenericHandler, dict(pluginName='nexus', format=['solr'])),
(r"/nexus/subsetter", GenericHandler, dict(pluginName='nexus', format=['subsetter'])),
(r"/ws/search/dataset", GenericHandler, dict(pluginName='slcp', format=['atom'])),
(r"/ws/search/granule", GenericHandler, dict(pluginName='slcp', format=['granule'])),
(r"/ws/facet/dataset", GenericHandler, dict(pluginName='slcp', format=['facet'])),
(r"/ws/suggest/dataset", GenericHandler, dict(pluginName='slcp', format=['suggest'])),
(r"/ws/metadata/dataset", GenericHandler, dict(pluginName='slcp', format=['echo10', 'umm-json'])),
(r"/ws/indicator/dataset", GenericHandler, dict(pluginName='slcp', format=['indicator'])),
(r"/ws/dat/dataset", GenericHandler, dict(pluginName='slcp', format=['dat'])),
(r"/ws/search/content", GenericHandler, dict(pluginName='slcp', format=['content'])),
(r"/ws/search/basin", GenericHandler, dict(pluginName='slcp', format=['basin'])),
(r"/ws/search/anomaly", GenericHandler, dict(pluginName='oceanxtremes', format=['datacasting'])),
(r"/ws/submit/anomaly", GenericHandler, dict(pluginName='oceanxtremes', format=['post'])),
(r"/ws/search/attribute", GenericHandler, dict(pluginName='oiip', format=['json', 'xml'])),
(r"/tie/collection", GenericHandler, dict(pluginName='tie', format=['collection'])),
(r"/example/es", GenericHandler, dict(pluginName='example', format=['elastic'])),
#(r"/ws/metadata/dataset", DatasetHandler, dict(format=['iso', 'gcmd'])),
#(r"/granule/.*", GranuleHandler),
#(r"/ws/search/granule", GenericHandler, dict(pluginName='product', format=['atom'])),
#(r"/ws/metadata/granule", GranuleHandler, dict(format=['iso', 'fgdc', 'datacasting'])),
(r"/passthrough/.*", GenericHandler, dict(pluginName='passthrough')),
(r"/ws/search/.*", TemplateRenderHandler)
], default_host=configuration.get('server', 'host'), **settings)
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(
configuration.getint('server', 'port')
)
ioLoop = tornado.ioloop.IOLoop.instance()
try:
logging.info('tornado is started.')
ioLoop.start()
except KeyboardInterrupt:
logging.info('tornado is shutting down.')
ioLoop.stop()