summaryrefslogtreecommitdiffstats
path: root/clover/controller/control/api
diff options
context:
space:
mode:
Diffstat (limited to 'clover/controller/control/api')
-rw-r--r--clover/controller/control/api/collector.py33
-rw-r--r--clover/controller/control/api/snort.py4
-rw-r--r--clover/controller/control/api/visibility.py53
3 files changed, 69 insertions, 21 deletions
diff --git a/clover/controller/control/api/collector.py b/clover/controller/control/api/collector.py
index 3abcba7..2d0c32c 100644
--- a/clover/controller/control/api/collector.py
+++ b/clover/controller/control/api/collector.py
@@ -108,26 +108,31 @@ def set_collector():
try:
p = request.json
r = redis.StrictRedis(host=HOST_IP, port=6379, db=0)
- del_keys = ['visibility_services', 'metric_prefixes',
- 'metric_suffixes', 'custom_metrics']
- for dk in del_keys:
- r.delete(dk)
try:
- for service in p['services']:
- r.sadd('visibility_services', service['name'])
+ if p['services']:
+ r.delete('visibility_services')
+ for service in p['services']:
+ r.sadd('visibility_services', service['name'].replace('-', '_'))
except (KeyError, ValueError) as e:
logging.debug(e)
return Response(
"Specify at least one service to track", status=400)
- if p['metric_prefixes'] and p['metric_suffixes']:
- for prefix in p['metric_prefixes']:
- r.sadd('metric_prefixes', prefix['prefix'])
- for suffix in p['metric_suffixes']:
- r.sadd('metric_suffixes', suffix['suffix'])
- if p['custom_metrics']:
- for metric in p['custom_metrics']:
- r.sadd('custom_metrics', metric['metric'])
+ try:
+ if p['metric_prefixes'] and p['metric_suffixes']:
+ del_keys = ['metric_prefixes', 'metric_suffixes']
+ for dk in del_keys:
+ r.delete(dk)
+ for prefix in p['metric_prefixes']:
+ r.sadd('metric_prefixes', prefix['prefix'])
+ for suffix in p['metric_suffixes']:
+ r.sadd('metric_suffixes', suffix['suffix'])
+ if p['custom_metrics']:
+ r.delete('custom_metrics')
+ for metric in p['custom_metrics']:
+ r.sadd('custom_metrics', metric['metric'])
+ except Exception as e:
+ logging.debug(e)
except Exception as e:
logging.debug(e)
diff --git a/clover/controller/control/api/snort.py b/clover/controller/control/api/snort.py
index e2177be..fc3811e 100644
--- a/clover/controller/control/api/snort.py
+++ b/clover/controller/control/api/snort.py
@@ -15,12 +15,12 @@ import redis
snort = Blueprint('snort', __name__)
grpc_port = '50052'
-pod_name = 'snort-ids'
+pod_name = 'snort-ids.default'
snort_grpc = pod_name + ':' + grpc_port
channel = grpc.insecure_channel(snort_grpc)
stub = snort_pb2_grpc.ControllerStub(channel)
-HOST_IP = 'redis'
+HOST_IP = 'redis.default'
@snort.route("/snort/addrule", methods=['GET', 'POST'])
diff --git a/clover/controller/control/api/visibility.py b/clover/controller/control/api/visibility.py
index 23eb714..67faaf0 100644
--- a/clover/controller/control/api/visibility.py
+++ b/clover/controller/control/api/visibility.py
@@ -19,14 +19,24 @@ HOST_IP = 'redis.default'
def clear_visibility():
# Zero out or delete redis keys with results
r = redis.StrictRedis(host=HOST_IP, port=6379, db=0)
- r.set('proxy_rt', 0)
r.set('trace_count', 0)
r.set('span_count', 0)
+ r.set('metric_count', 0)
del_keys = ['span_user_agent', 'span_urls', 'span_urls_z',
'span_status_codes_z', 'span_node_url_z', 'span_node_id_z',
- 'span_user_agent_z']
+ 'span_user_agent_z', 'span_status_code', 'span_node_id',
+ 'span_upstream_cluster', 'span_operation_name']
for dk in del_keys:
r.delete(dk)
+
+ # Response time NA
+ services = list(r.smembers('visibility_services'))
+ for service in services:
+ s = service.replace('_', '-')
+ r.hset(s, 'min_rt', 'NA')
+ r.hset(s, 'avg_rt', 'NA')
+ r.hset(s, 'max_rt', 'NA')
+
# Truncate cassandra tables
return collector.truncate()
@@ -43,17 +53,50 @@ def get_visibility_stats(s_type):
stat_type = p['stat_type']
r = redis.StrictRedis(host=HOST_IP, port=6379, db=0)
+ services = list(r.smembers('visibility_services'))
content = {}
if stat_type == 'system' or s_type == 'all':
content['trace_count'] = r.get('trace_count')
content['span_count'] = r.get('span_count')
+ content['metric_count'] = r.get('metric_count')
if stat_type == 'metrics' or s_type == 'all':
- content['metrics_test'] = r.lrange('metrics_test', 0, 200)
+ mp = list(r.smembers('metric_prefixes'))
+ ms = list(r.smembers('metric_suffixes'))
+ m = []
+ for service in services:
+ for prefix in mp:
+ for suffix in ms:
+ n = {}
+ m_name = 'metrics_' + prefix + service + suffix
+ n['name'] = m_name
+ n['service'] = service
+ n['prefix'] = prefix
+ n['suffix'] = suffix
+ n['values'] = r.lrange(m_name, 0, 100)
+ m.append(n)
+ content['metrics_time'] = m
if stat_type == 'tracing' or s_type == 'all':
- content['proxy_rt'] = r.get('proxy_rt')
- content['span_urls'] = list(r.smembers('span_urls'))
+ # Response times
+ x = []
+ for service in services:
+ rt = {}
+ s = service.replace('_', '-')
+ rt['name'] = s
+ rt['min'] = r.hget(s, 'min_rt')
+ rt['avg'] = r.hget(s, 'avg_rt')
+ rt['max'] = r.hget(s, 'max_rt')
+ x.append(rt)
+ content['response_times'] = x
+ # Distinct
+ content['request_urls'] = list(r.smembers('span_urls'))
content['user_agents'] = list(r.smembers('span_user_agent'))
+ content['status_codes'] = list(r.smembers('span_status_code'))
+ content['op_names'] = list(r.smembers('span_operation_name'))
+ content['node_ids'] = list(r.smembers('span_node_id'))
+ content['upstream_clusters'] = list(r.smembers(
+ 'span_upstream_cluster'))
+ # Zsets
content['user_agent_count'] = r.zrange(
"span_user_agent_z", 0, 50, False, True)
content['request_url_count'] = r.zrange(