提交 fb064b5a authored 作者: zw.wang's avatar zw.wang

feat: 打包、api参数解析写入influxdb

上级 6098b492
FROM ilabservice-registry.cn-hangzhou.cr.aliyuncs.com/basic/ubuntu-python3:18.04
WORKDIR /root/hikvision-isc
COPY ./ ./
RUN pip install -e .
CMD python hikvision_isc_client/app.py
from flask import Flask, jsonify, request
app = Flask('eventRcv')
@app.route('/event/rcv')
def event_rcv():
print(request.json())
return jsonify({
'code': 200
})
app.run(host='0.0.0.0', port=5001)
version: "2.2"
services:
isc-service:
container_name: isc-service
build:
context: .
ports:
- 5001:5001
influxdb:
container_name: influxdb
image: ilabservice-registry.cn-hangzhou.cr.aliyuncs.com/basic/influxdb:monitor
expose:
- "8083"
ports:
- 8086:8086
volumes:
- /var/lib/influxdb/:/var/lib/influxdb
environment:
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=ilabservice123
import dateutil.parser
from flask import Flask, jsonify, request
from intelab_python_sdk.logger import log, log_init
from db import influxdb
app = Flask('eventRcv')
log_init('api-server', True, '/var/log/event_rcv')
@app.route('/event/rcv', methods=['POST'])
def event_rcv():
body = request.get_json()
log.info(body)
influxdb.reconnect()
if body and body.get('method') == 'OnEventNotify':
events = []
for event in body['params']['events']:
events.append({
'measurement': 'event_vss',
'tags': {
'camera_index': event['srcIndex'],
'event_type': event['eventType']
},
'fields': {
'event_id': event['eventId'],
'camera_name': event['srcName'],
'paren_index': event['srcParentIndex']
},
'time': dateutil.parser.parse(event['happenTime'])
})
influxdb.write_points(events)
return jsonify({
'code': 200
})
app.run(host='0.0.0.0', port=5001)
...@@ -52,9 +52,11 @@ class HikVisionClient(object): ...@@ -52,9 +52,11 @@ class HikVisionClient(object):
verify=False) verify=False)
data = {} data = {}
if response.status_code == 200: if response.status_code == 200:
data['code'] = 200
res_json = response.json() res_json = response.json()
if res_json.get('code', '0x000000') == '0': if res_json.get('code', '0x000000') == '0':
data = response.json()['data'] if 'data' in res_json:
data = res_json['data']
else: else:
print(res_json['msg']) print(res_json['msg'])
else: else:
......
from influxdb import InfluxDBClient
from dynaconf import settings
class InfluxDB(object):
def __init__(self):
self._influxdb = None
self.init_app()
def init_app(self):
self.config = settings.get('INFLUXDB')
config = {
'host': self.config.get('HOST', 'localhost'),
'port': self.config.get('PORT', 8086),
'username': self.config.get('USERNAME', 'guest'),
'password': self.config.get('PASSWORD', 'guest'),
}
self._influxdb = InfluxDBClient(**config)
database = self.config.get('DATABASE', None)
if database:
self.switch_database(database)
def reconnect(self):
self.init_app()
def query(self, query_string):
return self._influxdb.query(query_string)
def write_points(self, points):
if not points:
return
return self._influxdb.write_points(points)
def create_database(self, database=None):
if not database:
database = self.config.get('DATABASE')
self._influxdb.create_database(database)
self.switch_database(database)
def switch_database(self, database):
self._influxdb.switch_database(database)
influxdb = InfluxDB()
...@@ -5,3 +5,9 @@ PORT = '' ...@@ -5,3 +5,9 @@ PORT = ''
KEY = '' KEY = ''
SECRET = '' SECRET = ''
[default.INFLUXDB]
HOST = '127.0.0.1'
PORT = 8086
USERNAME = 'admin'
PASSWORD = '123456'
DATABASE = 'intelab'
...@@ -24,7 +24,9 @@ setuptools.setup( ...@@ -24,7 +24,9 @@ setuptools.setup(
'pytz', 'pytz',
'intelab-python-sdk', 'intelab-python-sdk',
'flask', 'flask',
'dynaconf' 'dynaconf',
'influxdb',
'python-dateutil'
], ],
python_requires='>=3.6', python_requires='>=3.6',
) )
...@@ -5,8 +5,8 @@ from datetime import datetime, timedelta ...@@ -5,8 +5,8 @@ from datetime import datetime, timedelta
from intelab_python_sdk.logger import log_init, log from intelab_python_sdk.logger import log_init, log
from dynaconf import settings from dynaconf import settings
from client import HikVisionClient from hikvision_isc_client.client import HikVisionClient
from record import record_thread, get_video_duration, time_to_seconds from hikvision_isc_client.record import record_thread, get_video_duration, time_to_seconds
tz = pytz.timezone('Asia/Shanghai') tz = pytz.timezone('Asia/Shanghai')
......
from dynaconf import settings
from hikvision_isc_client.client import HikVisionClient
config = settings.get('ISC')
client = HikVisionClient(config.get('KEY'), config.get('SECRET'),
config.get('HOST'), config.get('PORT'))
# 获取该帐号下的摄像头信息
# with open('camera_infos.json', 'r+') as f:
# json.dump(client.get_cameras(), f, indent=4, ensure_ascii=False)
#
for camera in client.get_cameras():
print(camera)
url = client.get_camera_preview_url(camera['cameraIndexCode'], protocol='hls', stream_type=1)
print('摄像头{}的直播地址为{}'.format(camera['cameraIndexCode'], url.get('url')))
from dynaconf import settings
from hikvision_isc_client.client import HikVisionClient
config = settings.get('ISC')
client = HikVisionClient(config.get('KEY'), config.get('SECRET'),
config.get('HOST'), config.get('PORT'))
print(client.event_subscription('http://139.196.239.60:5001/event/rcv'))
print(client.event_subscription())
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论