| from twisted.web.server import Site |
| from twisted.web.static import File |
| from twisted.internet import reactor |
| from twisted.web.resource import Resource |
| from twisted.application import service, internet |
| |
| import logging |
| import os |
| from logging import config |
| import logging.handlers |
| |
| import simplejson |
| |
| |
| KIBANA = '/home/vagrant/kibana-3.1.2' |
| ALLOW_ORIGIN = 'http://192.168.1.10' |
| |
| if not os.path.exists('/var/log/xdata'): |
| os.makedirs('/var/log/xdata') |
| |
| # logging configuration |
| LOG_SETTINGS = { |
| 'version': 1, |
| 'handlers': { |
| 'xdata-v2': { |
| 'class': 'logging.handlers.RotatingFileHandler', |
| 'level': 'INFO', |
| 'formatter': 'xdata', |
| 'filename': '/var/log/xdata/xdata-v2.log', |
| 'mode': 'a', |
| 'maxBytes': 100e6, |
| 'backupCount': 10, |
| }, |
| 'xdata-v3': { |
| 'class': 'logging.handlers.RotatingFileHandler', |
| 'level': 'INFO', |
| 'formatter': 'xdata', |
| 'filename': '/var/log/xdata/xdata-v3.log', |
| 'mode': 'a', |
| 'maxBytes': 100e6, |
| 'backupCount': 10, |
| }, |
| 'file2': { |
| 'class': 'logging.handlers.RotatingFileHandler', |
| 'level': 'INFO', |
| 'formatter': 'detailed', |
| 'filename': '/var/log/xdata/xdata-error.log', |
| 'mode': 'a', |
| 'maxBytes': 100e6, |
| 'backupCount': 10, |
| }, |
| }, |
| 'formatters': { |
| 'xdata': { |
| 'format': '%(message)s', |
| }, |
| 'detailed': { |
| 'format': '%(asctime)s %(module)-17s line:%(lineno)-4d ' \ |
| '%(levelname)-8s %(message)s', |
| }, |
| 'email': { |
| 'format': 'Timestamp: %(asctime)s\nModule: %(module)s\n' \ |
| 'Line: %(lineno)d\nMessage: %(message)s', |
| }, |
| }, |
| 'loggers': { |
| 'xdata-v2': { |
| 'level':'DEBUG', |
| 'handlers': ['xdata-v2',] |
| }, |
| 'xdata-v3': { |
| 'level':'DEBUG', |
| 'handlers': ['xdata-v3',] |
| }, |
| 'error': { |
| 'level':'DEBUG', |
| 'handlers': ['file2',] |
| }, |
| } |
| } |
| |
| config.dictConfig(LOG_SETTINGS) |
| |
| logger = logging.getLogger('xdata-v2') |
| loggerv3 = logging.getLogger('xdata-v3') |
| logger_err = logging.getLogger('error') |
| |
| kibana = File(KIBANA) |
| |
| wf_dict = { |
| 0: "WF_OTHER", |
| 1: "WF_DEFINE", |
| 2: "WF_GETDATA", |
| 3: "WF_EXPLORE", |
| 4: "WF_CREATE", |
| 5: "WF_ENRICH", |
| 6: "WF_TRANSFORM" |
| } |
| |
| class Logger(Resource): |
| def render_OPTIONS(self, request): |
| request.setHeader('Access-Control-Allow-Origin', ALLOW_ORIGIN) |
| request.setHeader('Access-Control-Allow-Methods', 'POST') |
| request.setHeader('Access-Control-Allow-Headers', 'x-prototype-version,x-requested-with,Content-Type') |
| request.setHeader('Access-Control-Max-Age', 2520) # 42 hours |
| return '' |
| |
| def render_POST(self, request): |
| newdata = request.content.getvalue() |
| newdata = simplejson.loads(newdata) |
| request.setHeader('Access-Control-Allow-Origin', ALLOW_ORIGIN) |
| request.setHeader('Access-Control-Allow-Methods', 'POST') |
| request.setHeader('Access-Control-Allow-Headers', 'x-prototype-version,x-requested-with,Content-Type') |
| request.setHeader('Access-Control-Max-Age', 2520) # 42 hours |
| |
| try: |
| for a in newdata: |
| if 'useraleVersion' in a: |
| if a['useraleVersion'].split('.')[0] == '3': |
| loggerv3.info(simplejson.dumps(a)) |
| |
| elif ('parms' in a) and ('wf_state' in a['parms']): |
| a['wf_state_longname'] = wf_dict[a['parms']['wf_state']] |
| |
| logger.info(simplejson.dumps(a)) |
| except e: |
| logger_err.error(e) |
| |
| return '' |
| |
| root = Resource() |
| root.putChild("kibana", kibana) |
| root.putChild("send_log", Logger()) |
| |
| # create a resource to serve static files |
| tmp_service = internet.TCPServer(80, Site(root)) |
| application = service.Application("User-ALE") |
| |
| # attach the service to its parent application |
| tmp_service.setServiceParent(application) |