Skip to content

Commit

Permalink
Merge pull request #1 from thiezn/multiple_poller_support
Browse files Browse the repository at this point in the history
Multiple poller support
  • Loading branch information
thiezn committed Sep 22, 2016
2 parents e190d7d + b629fc7 commit b18715a
Show file tree
Hide file tree
Showing 10 changed files with 1,416 additions and 169 deletions.
30 changes: 13 additions & 17 deletions controller/app/mod_tasks/controllers.py
Expand Up @@ -4,11 +4,10 @@
from libs.tasks import TaskHandler, form_to_json_task
from libs.database import Database
from .forms import AddTask, DeleteTask
import json


mod_tasks = Blueprint('tasks', __name__, url_prefix='/tasks')
task_handler = TaskHandler()
task_handler = TaskHandler(pollers=[('127.0.0.1', 9090), ('127.0.0.1', 9091)])
database = Database()


Expand All @@ -23,11 +22,16 @@ def get_tasks():

@mod_tasks.route('/<task_id>', methods=['GET'])
def get_task(task_id):
task = task_handler.get_task(task_id)
"""Returns a single task
:return: List of the Task on each poller
"""
tasks = task_handler.get_task(task_id)
data = task_handler.get_result(task_id)
return render_template('tasks/task.html',
title='Task',
task=task,
data=json.dumps(task['results']))
tasks=tasks,
data=data)


@mod_tasks.route('/results', methods=['GET'])
Expand Down Expand Up @@ -64,16 +68,8 @@ def update_task(task_id):
pass


@mod_tasks.route('/delete', methods=['GET', 'POST'])
def delete_task():
form = DeleteTask(request.form)

if request.method == 'POST' and form.validate():
result = task_handler.delete_task(form.task_id.data)
if result and 'error' in result:
return render_template('tasks/delete.html',
form=form,
error=result['error'])
return redirect(url_for('tasks.get_tasks'))
@mod_tasks.route('/delete/<task_id>', methods=['GET', 'POST'])
def delete_task(task_id):
result = task_handler.delete_task(task_id)
return redirect(url_for('tasks.get_tasks'))

return render_template('tasks/delete.html', form=form)
1,259 changes: 1,259 additions & 0 deletions controller/app/static/css/c3.min.css

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions controller/app/static/js/c3.min.js

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions controller/app/templates/base.html
@@ -1,11 +1,15 @@
<!DOCTYPE html>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<html>
<head>
{% if title %}
<title>netMon - {{ title }}</title>
{% else %}
<title>netMon</title>
{% endif %}

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
{% block loadscripts %} {% endblock %}
<!--
<link rel="stylesheet" href="/static/css/bokeh-0.11.1.min.css" type="text/css" />
<script type="text/javascript" src="/static/js/bokeh-0.11.1.min.js"></script>
Expand Down
9 changes: 2 additions & 7 deletions controller/app/templates/inventory/devices.html
Expand Up @@ -4,13 +4,8 @@
{% include "inventory/navigation.html" %}

<table border=1>
{% for id, device in devices.items() %}
{% for key, value in device.items() %}
<tr>
<th>{{ key }}</th>
<td>{{ value }}</td>
</tr>
{% endfor %}
{% for device in devices %}
{{ device }}
{% else %}
<tr><td>No devices found</td></tr>
{% endfor %}
Expand Down
1 change: 0 additions & 1 deletion controller/app/templates/tasks/navigation.html
Expand Up @@ -3,6 +3,5 @@
<a href="/tasks/results">List all task results</a>
<a href="/tasks/add">add a new task</a>
<a href="/tasks/edit">edit an existing task</a>
<a href="/tasks/delete">delete a task</a>
</div>
<hr>
5 changes: 1 addition & 4 deletions controller/app/templates/tasks/results.html
Expand Up @@ -5,11 +5,8 @@

<table border=1>
{% for result in results %}
{{ result }}
<tr>
{% for key, value in result.items() %}
<th>{{ key }}</th>
<td>{{ value }}</td>
{% endfor %}
</tr>
{% else %}
<tr><td>No results found</td></tr>
Expand Down
26 changes: 15 additions & 11 deletions controller/app/templates/tasks/scheduled.html
Expand Up @@ -5,26 +5,30 @@

<table border=1 cellpadding=10>
<tr>
<th>Type</th>
<th>type</th>
<th>recurrence time (sec)</th>
<th>recurrece count</th>
<th>recurrence count</th>
<th>destination</th>
<th>details</th>
<th>poller</th>
<th>delete</th>
</tr>
{% for task in tasks %}
{% for task_id, data in tasks.items() %}
<tr>
<td>{{ task.type }}</td>
<td>{{ task.recurrence_time }}</td>
<td>{{ task.recurrence_count }}</td>
{% if task.type == 'GetPage' %}
<td>{{ task.url }}</td>
<td>{{ data[0].type }}</td>
<td>{{ data[0].recurrence_time }}</td>
<td>{% if data[0].recurrence_count %}{{ data[0].recurrence_count }}{% else %}Infinite{% endif %}</td>
{% if data[0].type == 'GetPage' %}
<td>{{ data[0].url }}</td>
{% else %}
<td>{{ task.device }}</td>
<td>{{ data[0].device }}</td>
{% endif %}
<td><a href="{{ url_for('tasks.get_task', task_id=task._id) }}">link</a></td>
<td><a href="{{ url_for('tasks.get_task', task_id=task_id) }}">details</a></td>
<td>{% for poller in data %}{{poller.poller}}<br>{% endfor %}</td>
<td><a href="{{ url_for('tasks.delete_task', task_id=task_id) }}">delete</a></td>
</tr>
{% else %}
<tr><td>No tasks found</td></tr>
<tr><td colspan=6>No tasks found</td></tr>
{% endfor %}
</table>

Expand Down
114 changes: 32 additions & 82 deletions controller/app/templates/tasks/task.html
Expand Up @@ -2,103 +2,53 @@
{% extends "base.html" %}

< <!-- add d3 from web -->
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>

{% block loadscripts %}
<link href="/static/css/c3.min.css" rel="stylesheet" type="text/css">
<script src="/static/js/c3.min.js" charset="utf-8"></script>
{% endblock %}

{% block content %}
{% include "tasks/navigation.html" %}

<!-- <div id="chart"></div> -->

<table>
<tr><th colspan=2>{{ task.type }}</th></tr>
<tr><th>recurrence time</th><td>{{ task.recurrence_time }} sec</td></tr>
<tr><th>recurrence count</th><td>{{ task.recurrence_count }}</td></tr>
{% if task.type == 'Ping' %}
<tr><th>device</th><td>{{ task.device }}</td></tr>
{% elif task.type == 'InterfaceOctetsProbe' %}
<tr><th>device</th><td>{{ task.device }}</td></tr>
<tr><th>if_index</th><td>{{ task.if_index }}</td></tr>
<tr><th>ID</th><td>{{tasks[0]._id }}</td></tr>
<tr><th>Type</th><td>{{ tasks[0].type }}</td></tr>
<tr><th>recurrence time</th><td>{{ tasks[0].recurrence_time }} sec</td></tr>
<tr><th>recurrence count</th><td>{{ tasks[0].recurrence_count }}</td></tr>
{% if tasks[0].type == 'GetPage' %}
<tr><th>URL</th><td>{{ tasks[0].url }}</td></tr>
{% else %}
<tr><th>device</th><td>{{ tasks[0].device }}</td></tr>
{% endif %}
{% if tasks[0].type == 'InterfaceOctetsProbe' %}
<tr><th>if_index</th><td>{{ tasks[0].if_index }}</td></tr>
{% endif %}
</table>
<hr>

<svg id="visualisation" width="1000" height="250"></svg>
<div id="task"></div>


<script language="javascript">

var lineData = [{
x: 1,
y: 5
}, {
x: 20,
y: 20
}, {
x: 40,
y: 10
}, {
x: 60,
y: 40
}, {
x: 80,
y: 5
}, {
x: 100,
y: 60
}];


var vis = d3.select('#visualisation'),
WIDTH = 1000,
HEIGHT = 250,
MARGINS = {
top: 20,
right: 20,
bottom: 20,
left: 50
var chart = c3.generate({
bindto: '#task',
data: {
json: {{ data[0][tasks[0]._id]|safe }},
keys: {
value: ['min', 'max', 'avg'],
}
},
xRange = d3.scale.linear().range([MARGINS.left, WIDTH - MARGINS.right]).domain([d3.min({{data|safe}}, function(d) {
return d.end_timestamp;
}), d3.max({{data|safe}}, function(d) {
return d.end_timestamp;
})]),
yRange = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([d3.min({{data|safe}}, function(d) {
return d.avg;
}), d3.max({{data|safe}}, function(d) {
return d.avg;
})]),
xAxis = d3.svg.axis()
.scale(xRange)
.tickSize(5)
.tickSubdivide(true),
yAxis = d3.svg.axis()
.scale(yRange)
.tickSize(5)
.orient('left')
.tickSubdivide(true);

vis.append('svg:g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (HEIGHT - MARGINS.bottom) + ')')
.call(xAxis);

vis.append('svg:g')
.attr('class', 'y axis')
.attr('transform', 'translate(' + (MARGINS.left) + ',0)')
.call(yAxis);

var lineFunc = d3.svg.line()
.x(function(d) {
return xRange(d.end_timestamp);
})
.y(function(d) {
return yRange(d.avg);
})
.interpolate('linear');
axis: {
x: {
count: 8
}
}
});

vis.append('svg:path')
.attr('d', lineFunc({{data|safe}}))
.attr('stroke', 'blue')
.attr('stroke-width', 2)
.attr('fill', 'none');

</script>

Expand Down

0 comments on commit b18715a

Please sign in to comment.