es api接口脚本

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)

  

猜你喜欢

转载自www.cnblogs.com/jcici/p/12191751.html
今日推荐