1、新建一个目录cdbinterfacetask
2、在该目录下编辑run.py文件,文件内容如下:
from app import app #从app目录引入app模块
app.run(host='127.0.0.1',port=5000) #定义服务的端口为5000
3、在cdbinterfacetask目录下建立app目录,app目录下创建init.py(from app import app实际上import的就是init.py的内容)
init.py文件内容为:
from flask import Flask #引入Flask类
from config import load_config #从config目录import load_config模块
app = Flask(name) #创建一个Flask的实例
config = load_config()
app.config.from_object(config) #from_object()是flask获取配置项的方法,表示从config变量获取配置项
from api import api_views #从api目录下import api_views模块
4、config目录下面的内容如下(config目录和app目录是同一级目录)
init.py init.pyc default.py default.pyc production.py production.pyc
init.py文件内容为:
encoding: utf-8
def load_config():
""" load config information """
from production import ProductionConfig #从production.py import ProductionConfig模块
return ProductionConfig
production.py文件内容为:
encoding: utf-8
from default import * #从default.py import所有模块
class ProductionConfig(Config): #ProductionConfig继承Config类,Config类在default.py里面定义了,表示ProductionConfig类可以引用Config类定义的内容
DB_USER = 'dba_readonly'
DB_PASS = '2017@readonly'
ACCESS_DB = 'cdb2'
default.py文件内容为:
encoding: utf-8
class Config():
AUTHOR='vivaxiao'
5、在/cdbinterfacetask/app/目录下建立api目录
6、在api目录下建立init.py,但是我们的init.py内容为空,init.py存在的意义仅仅是为了让api目录成为一个可以import的模块如果该文件有内容,那么就导入该文件中的内容,如果没有,那么就会导入该目录下的其他模块.比如在api目录下,init.py为空,那么from api import api_views代表的含义就是导入api目录下的api_views.py
7、编辑api_views.py (该py脚本就是实际工作的脚本)
!/usr/bin/env python
encoding: utf-8
import json
from app import app
from flask import request
from flask import jsonify #python flask设置返回json数据,需要用到flask的jsonify模块,对json数据进行jsonify(json_data),表示返回一个json response
cluster_dict = {'上海金桥':49}
ossdb_dict = {'上海金桥':'xxx.xxx.xxx.xxx:3306'}
@app.route('/api/tasks')
def api_tasks():
"""
传入cluster_id获取该集群的异常任务
"""
db_user = app.config.get("DB_USER")
db_passwd = app.config.get("DB_PASS")
access_db = app.config.get("ACCESS_DB")
cluster_id = request.args.get('cluster_id')
for key,value in cluster_dict.items():
if str(value) == str(cluster_id):
cluster_name = key
print cluster_name
for k,v in ossdb_dict.items():
if k == cluster_name:
#print v
db_host = v.split(':',1)[0]
db_port = v.split(':',1)[1]
print db_host
print db_port
data = {"db_host":db_host,"db_port":db_port,"db_user":db_user,"db_passwd":db_passwd,"access_db":access_db}
json_data = json.dumps(data)
print json_data
return jsonify(json_data)
curl get方法传递参数,访问服务:
curl http://127.0.0.1:8082/api/tasks?cluster_id=61
"{"db_passwd": "abcdexxx@#$", "db_user": "dba", "db_host": "192.168.1.1", "access_db": "testdb", "db_port": "3306"}"