es api脚本
#!/usr/bin/python env # -*- coding: utf-8 -*- # Author:cc # date: 2020/1/6 from elasticsearch import Elasticsearch from flask import Flask, request, jsonify from flask.views import MethodView import time, datetime, logging logging.basicConfig(filename='es.log', format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO) logger = logging.getLogger(__name__) es = Elasticsearch( ['http://172.27.27.220'], # http_auth=('elastic', 'passwd'), port=9200 ) class ALi(MethodView): def __init__(self): self.index_name = request.args.get("index_name") self.query_json = request.args.get("query_json") self.nowTime = request.args.get("nowTime") self.startTime = request.args.get("startTime") def get(self): if self.index_name is None or self.query_json is None or self.nowTime \ is None or self.startTime is None: logger.error("请确保带有必要参数(index_name, query_json, nowTime, \ startTime", exc_info=True) return "请确保带有必要参数(index_name, query_json, nowTime, startTime)" if ":nowTime" in self.query_json: self.query_json = self.query_json.replace(':nowTime', self.nowTime) if ":startTime" in self.query_json: self.query_json = self.query_json.replace(':startTime', self.startTime) try: es_data = es.search(index=self.index_name, body=self.query_json) except Exception as e: # exc_info = True打印出具体的错误信息 logger.error("参数错误!!!", exc_info = True) return str(e) return jsonify(es_data) class ALiPost(MethodView): def __init__(self): self.index_name = request.args.get("index_name") self.query_json = request.args.get("query_json") self.postNowTime = request.args.get("postNowTime") self.postStartTime = request.args.get("postStartTime") def get(self): if self.index_name is None or self.query_json is None or self.postNowTime \ is None or self.postStartTime is None: logger.error("请确保带有必要参数(index_name, query_json, postNowTime, \ postStartTime", exc_info = True) return "请确保带有必要参数(index_name, query_json, postNowTime, postStartTime)" if ":postNowTime" in self.query_json: self.query_json = self.query_json.replace(':postNowTime', self.postNowTime) if ":postStartTime" in self.query_json: self.query_json = self.query_json.replace(':postStartTime', self.postStartTime) try: es_data = es.search(index=self.index_name, body=self.query_json) except Exception as e: # exc_info = True打印出具体的错误信息 logger.error("参数错误!!!", exc_info = True) return str(e) return jsonify(es_data) class StrInput(MethodView): def __init__(self): self.str_input1 = request.args.get("str_input1") self.str_input2 = request.args.get("str_input2") self.str_input3 = request.args.get("str_input3") self.str_input4 = request.args.get("str_input4") def get(self): if self.str_input1: str_json = { "str_input1": self.str_input1, "str_input2": self.str_input2, "str_input3": self.str_input3, "str_input4": self.str_input4 } return jsonify(str_json) else: logger.error("请确保带有一个str_input参数!!!", exc_info = True) return "请确保带有一个str_input参数!!!" class StrTime(MethodView): def __init__(self): self.str_time = request.args.get("str_time") def get(self): """ 支持天时分秒,参数后面分别带有d,h,m,s即代表时分秒 example:1小时之前的数据参数为str_time=1h """ try: if 'd' in self.str_time: ago_time = (datetime.datetime.now()-datetime.timedelta( days=int(self.str_time.replace('d', '')))) elif 'h' in self.str_time: ago_time = (datetime.datetime.now()-datetime.timedelta( hours=int(self.str_time.replace('h', '')))) elif 'm' in self.str_time: ago_time = (datetime.datetime.now()-datetime.timedelta( minutes=int(self.str_time.replace('m', '')))) else: # 默认为秒 ago_time = (datetime.datetime.now()-datetime.timedelta( seconds=int(self.str_time.replace('s', '')))) unix_time = time.mktime(ago_time.timetuple()) except Exception as e: logger.error("时间间隔输入有误!!!", exc_info = True) return "时间间隔输入有误!!!" # 返回秒级时间戳 return str(int(unix_time)) app = Flask(__name__) app.add_url_rule('/', view_func=ALi.as_view('index'), methods=['GET']) app.add_url_rule('/post', view_func=ALiPost.as_view('post'), methods=['GET']) app.add_url_rule('/str_input', view_func=StrInput.as_view('str_input'), methods=['GET']) app.add_url_rule('/str_time', view_func=StrTime.as_view('str_time'), methods=['GET']) if __name__ == "__main__": # 如须打印日志到日志文件,debug模式默认关闭 debug=True可以使得浏览器中打印的json串好看起来 app.run(host = '0.0.0.0', port = 8089, debug=True)