http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/server.py ---------------------------------------------------------------------- diff --git a/src/main/python/server.py b/src/main/python/server.py new file mode 100644 index 0000000..409593f --- /dev/null +++ b/src/main/python/server.py @@ -0,0 +1,102 @@ +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()
http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/templates/podaac-dataset-osd.xml ---------------------------------------------------------------------- diff --git a/src/main/python/templates/podaac-dataset-osd.xml b/src/main/python/templates/podaac-dataset-osd.xml new file mode 100644 index 0000000..a59f6b6 --- /dev/null +++ b/src/main/python/templates/podaac-dataset-osd.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" + xmlns:georss="http://www.georss.org/georss" xmlns:time="http://a9.com/-/opensearch/extensions/time/1.0/" + xmlns:gml="http://www.opengis.net/gml" xmlns:podaac="http://podaac.jpl.nasa.gov/opensearch/"> + <ShortName>PO.DAAC Dataset Search</ShortName> + <Description>PO.DAAC Dataset Search</Description> + <Tags>PO.DAAC Dataset Search</Tags> + <Contact>[email protected]</Contact> + <Url type="application/atom+xml" template="{{ request.protocol }}://{{ request.host }}/ws/search/dataset?keyword={searchTerms}&startIndex={startIndex?}&itemsPerPage={count?}&bbox={georss:box?}&startTime={time:start?}&endTime={time:end?}&datasetId={podaac:persistentId?}&shortName={podaac:shortName?}&sortBy={podaac:sortBy?}&pretty={podaac:pretty?}&processLevel={podaac:processLevel?}&format=atom"/> + <Url type="application/rss+xml" template="{{ request.protocol }}://{{ request.host }}/ws/search/dataset?keyword={searchTerms}&startIndex={startIndex?}&itemsPerPage={count?}&bbox={georss:box?}&startTime={time:start?}&endTime={time:end?}&datasetId={podaac:persistentId?}&shortName={podaac:shortName?}&sortBy={podaac:sortBy?}&pretty={podaac:pretty?}&processLevel={podaac:processLevel?}&format=rss"/> + <LongName>PO.DAAC Dataset Search</LongName> + <Developer>PO.DAAC</Developer> + <Language>en-us</Language> + <OutputEncoding>UTF-8</OutputEncoding> + <InputEncoding>UTF-8</InputEncoding> +</OpenSearchDescription> http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/templates/podaac-granule-osd.xml ---------------------------------------------------------------------- diff --git a/src/main/python/templates/podaac-granule-osd.xml b/src/main/python/templates/podaac-granule-osd.xml new file mode 100644 index 0000000..e55c3e9 --- /dev/null +++ b/src/main/python/templates/podaac-granule-osd.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" + xmlns:georss="http://www.georss.org/georss" xmlns:time="http://a9.com/-/opensearch/extensions/time/1.0/" + xmlns:gml="http://www.opengis.net/gml" xmlns:podaac="http://podaac.jpl.nasa.gov/opensearch/"> + <ShortName>PO.DAAC Granule Search</ShortName> + <Description>PO.DAAC Granule Search</Description> + <Tags>PO.DAAC Granule Search</Tags> + <Contact>[email protected]</Contact> + <Url type="application/atom+xml" template="{{ request.protocol }}://{{ request.host }}/ws/search/granule?datasetId={podaac:persistentId}&startIndex={startIndex?}&itemsPerPage={count?}&bbox={georss:box?}&startTime={time:start?}&endTime={time:end?}&granuleName={podaac:granuleName?}&shortName={podaac:shortName?}&sortBy={podaac:sortBy?}&pretty={podaac:pretty?}&format=atom"/> + <Url type="application/rss+xml" template="{{ request.protocol }}://{{ request.host }}/ws/search/granule?datasetId={podaac:persistentId}&startIndex={startIndex?}&itemsPerPage={count?}&bbox={georss:box?}&startTime={time:start?}&endTime={time:end?}&granuleName={podaac:granuleName?}&shortName={podaac:shortName?}&sortBy={podaac:sortBy?}&pretty={podaac:pretty?}&format=rss"/> + <LongName>PO.DAAC Granule Search</LongName> + <Developer>PO.DAAC</Developer> + <Language>en-us</Language> + <OutputEncoding>UTF-8</OutputEncoding> + <InputEncoding>UTF-8</InputEncoding> +</OpenSearchDescription> http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/solr/product/conf/data-config.xml ---------------------------------------------------------------------- diff --git a/src/main/solr/product/conf/data-config.xml b/src/main/solr/product/conf/data-config.xml new file mode 100644 index 0000000..afc4741 --- /dev/null +++ b/src/main/solr/product/conf/data-config.xml @@ -0,0 +1,106 @@ +<!--*******************************************************************************************************************--> +<!-- GIBS: product dataimport data-config.xml --> +<!-- url="jdbc:postgresql://localhost:8888/gibs" --> +<!-- user=gibs" --> +<!--*******************************************************************************************************************--> +<dataConfig> + + <dataSource + driver="org.postgresql.Driver" + url="jdbc:postgresql://localhost/twright" + user="twright" /> + + <document> + + <entity name="product" + query="select * from product_view" + transformer="RegexTransformer"> + + <field column="product_granule_id_list" name="product_granule_id_list" splitBy = "," /> + <field column="product_granule_version_list" name="product_granule_version_list" splitBy = "," /> + <field column="product_granule_dataset_id_list" name="product_granule_dataset_id_list" splitBy = "," /> + <field column="product_granule_metadata_endpoint_list" name="product_granule_metadata_endpoint_list" splitBy = "," /> + <field column="product_granule_remote_granule_ur_list" name="product_granule_remote_granule_ur_list" splitBy = "," /> + + <field column="product_operation_version_list" name="product_operation_version_list" splitBy = "," /> + <field column="product_operation_agent_list" name="product_operation_agent_list" splitBy = "," /> + <field column="product_operation_list" name="product_operation_list" splitBy = "," /> + <field column="product_operation_command_list" name="product_operation_command_list" splitBy = "," /> + <field column="product_operation_arguments_list" name="product_operation_arguments_list" splitBy = "," /> + <field column="product_operation_start_time_list" name="product_operation_start_time_list" splitBy = "," /> + <field column="product_operation_stop_time_list" name="product_operation_stop_time_list" splitBy = "," /> + <field column="product_operation_start_time_string_list" name="product_operation_start_time_string_list" splitBy = "," /> + <field column="product_operation_stop_time_string_list" name="product_operation_stop_time_string_list" splitBy = "," /> + + <field column="product_archive_name_list" name="product_archive_name_list" splitBy = "," /> + <field column="product_archive_version_list" name="product_archive_version_list" splitBy = "," /> + <field column="product_archive_type_list" name="product_archive_type_list" splitBy = "," /> + <field column="product_archive_file_size_list" name="product_archive_file_size_list" splitBy = "," /> + <field column="product_archive_checksum_list" name="product_archive_checksum_list" splitBy = "," /> + <field column="product_archive_compress_flag_list" name="product_archive_compress_flag_list" splitBy = "," /> + <field column="product_archive_status_list" name="product_archive_status_list" splitBy = "," /> + <field column="product_archive_reference_description_list" name="product_archive_reference_description_list" splitBy = "," /> + <field column="product_archive_reference_name_list" name="product_archive_reference_name_list" splitBy = "," /> + <field column="product_archive_reference_type_list" name="product_archive_reference_type_list" splitBy = "," /> + <field column="product_archive_reference_status_list" name="product_archive_reference_status_list" splitBy = "," /> + + <field column="product_reference_version_list" name="product_reference_version_list" splitBy = "," /> + <field column="product_reference_type_list" name="product_reference_type_list" splitBy = "," /> + <field column="product_reference_name_list" name="product_reference_name_list" splitBy = "," /> + <field column="product_reference_path_list" name="product_reference_path_list" splitBy = "," /> + <field column="product_reference_description_list" name="product_reference_description_list" splitBy = "," /> + <field column="product_reference_status_list" name="product_reference_status_list" splitBy = "," /> + + <field column="product_data_day_version_list" name="product_data_day_version_list" splitBy = "," /> + <field column="product_data_day_list" name="product_data_day_list" splitBy = "," /> + <field column="product_data_day_string_list" name="product_data_day_string_list" splitBy = "," /> + + <field column="product_contact_version_list" name="product_contact_version_list" splitBy = "," /> + <field column="product_contact_role_list" name="product_contact_role_list" splitBy = "," /> + <field column="product_contact_first_name_list" name="product_contact_first_name_list" splitBy = "," /> + <field column="product_contact_last_name_list" name="product_contact_last_name_list" splitBy = "," /> + <field column="product_contact_middle_name_list" name="product_contact_middle_name_list" splitBy = "," /> + <field column="product_contact_address_list" name="product_contact_address_list" splitBy = "," /> + <field column="product_contact_notify_type_list" name="product_contact_notify_type_list" splitBy = "," /> + <field column="product_contact_email_list" name="product_contact_email_list" splitBy = "," /> + <field column="product_contact_phone_list" name="product_contact_phone_list" splitBy = "," /> + <field column="product_contact_fax_list" name="product_contact_fax_list" splitBy = "," /> + <field column="product_contact_provider_long_name_list" name="product_contact_provider_long_name_list" splitBy = "," /> + <field column="product_contact_provider_short_name_list" name="product_contact_provider_short_name_list" splitBy = "," /> + <field column="product_contact_provider_type_list" name="product_contact_provider_type_list" splitBy = "," /> + <field column="product_contact_provider_resource_descriptions_list" name="product_contact_provider_resource_descriptions_list" splitBy = "," /> + <field column="product_contact_provider_resource_names_list" name="product_contact_provider_resource_names_list" splitBy = "," /> + <field column="product_contact_provider_resource_paths_list" name="product_contact_provider_resource_paths_list" splitBy = "," /> + <field column="product_contact_provider_resource_types_list" name="product_contact_provider_resource_types_list" splitBy = "," /> + + <field column="product_element_version_list" name="product_element_version_list" splitBy = "," /> + <field column="product_element_obligation_flag_list" name="product_element_obligation_flag_list" splitBy = "," /> + <field column="product_element_scope_list" name="product_element_scope_list" splitBy = "," /> + <field column="product_element_dd_version_list" name="product_element_dd_version_list" splitBy = "," /> + <field column="product_element_dd_type_list" name="product_element_dd_type_list" splitBy = "," /> + <field column="product_element_dd_description_list" name="product_element_dd_description_list" splitBy = "," /> + <field column="product_element_dd_scope_list" name="product_element_dd_scope_list" splitBy = "," /> + <field column="product_element_dd_long_name_list" name="product_element_dd_long_name_list" splitBy = "," /> + <field column="product_element_dd_short_name_list" name="product_element_dd_short_name_list" splitBy = "," /> + <field column="product_element_dd_max_length_list" name="product_element_element_dd_max_length_list" splitBy = "," /> + + <field column="product_datetime_version_list" name="product_datetime_version_list" splitBy = "," /> + <field column="product_datetime_value_list" name="product_datetime_value_list" splitBy = "," /> + <field column="product_datetime_value_string_list" name="product_datetime_value_string_list" splitBy = "," /> + + <field column="product_character_version_list" name="product_character_verison_list" splitBy = "," /> + <field column="product_character_value_list" name="product_character_value_list" splitBy = "," /> + + <field column="product_integer_version_list" name="product_integer_version_list" splitBy = "," /> + <field column="product_integer_value_list" name="product_integer_value_list" splitBy = "," /> + <field column="product_integer_units_list" name="product_integer_units_list" splitBy = "," /> + + <field column="product_real_version_list" name="product_real_version_list" splitBy = "," /> + <field column="product_real_value_list" name="product_real_value_list" splitBy = "," /> + <field column="product_real_units_list" name="product_real_units_list" splitBy = "," /> + + </entity> + + </document> + +</dataConfig> http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/solr/product/conf/dataimport.properties ---------------------------------------------------------------------- diff --git a/src/main/solr/product/conf/dataimport.properties b/src/main/solr/product/conf/dataimport.properties new file mode 100644 index 0000000..849fdd7 --- /dev/null +++ b/src/main/solr/product/conf/dataimport.properties @@ -0,0 +1,3 @@ +#Thu Nov 05 22:31:01 UTC 2015 +last_index_time=2015-11-05 22\:28\:55 +product.last_index_time=2015-11-05 22\:28\:55
