Changes for demo
This commit is contained in:
parent
a96eab5bce
commit
6f6e4ead54
0
monitoring/api/__init__.py
Normal file
0
monitoring/api/__init__.py
Normal file
BIN
monitoring/api/__init__.pyc
Normal file
BIN
monitoring/api/__init__.pyc
Normal file
Binary file not shown.
99
monitoring/api/monitoring.py
Normal file
99
monitoring/api/monitoring.py
Normal file
@ -0,0 +1,99 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from monclient import client as mon_client
|
||||
from horizon.utils import functions as utils
|
||||
from openstack_dashboard.api import base
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AttrStore:
|
||||
pass
|
||||
|
||||
def format_parameters(params):
|
||||
parameters = {}
|
||||
for count, p in enumerate(params, 1):
|
||||
parameters['Parameters.member.%d.ParameterKey' % count] = p
|
||||
parameters['Parameters.member.%d.ParameterValue' % count] = params[p]
|
||||
return parameters
|
||||
|
||||
|
||||
def monclient(request, password=None):
|
||||
api_version = "2_0"
|
||||
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
|
||||
cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', None)
|
||||
endpoint = 'http://192.168.10.4:8080/v2.0' # base.url_for(request, 'orchestration')
|
||||
LOG.debug('monclient connection created using token "%s" and url "%s"' %
|
||||
(request.user.token.id, endpoint))
|
||||
kwargs = {
|
||||
'token': request.user.token.id,
|
||||
'insecure': insecure,
|
||||
'ca_file': cacert,
|
||||
'username': request.user.username,
|
||||
'password': password
|
||||
#'timeout': args.timeout,
|
||||
#'ca_file': args.ca_file,
|
||||
#'cert_file': args.cert_file,
|
||||
#'key_file': args.key_file,
|
||||
}
|
||||
client = mon_client.Client(api_version, endpoint, **kwargs)
|
||||
client.format_parameters = format_parameters
|
||||
return client
|
||||
|
||||
|
||||
def alarm_list(request, marker=None, paginate=False):
|
||||
limit = getattr(settings, 'API_RESULT_LIMIT', 1000)
|
||||
page_size = utils.get_page_size(request)
|
||||
|
||||
if paginate:
|
||||
request_size = page_size + 1
|
||||
else:
|
||||
request_size = limit
|
||||
|
||||
kwargs = {}
|
||||
if marker:
|
||||
kwargs['marker'] = marker
|
||||
args = AttrStore()
|
||||
args.runlocal = True
|
||||
args.os_tenant_id = "12345678"
|
||||
alarm_iter = monclient(request).alarms.list(args, **kwargs)
|
||||
|
||||
has_more_data = False
|
||||
alarms = list(alarm_iter)
|
||||
if paginate:
|
||||
if len(alarms) > page_size:
|
||||
alarms.pop()
|
||||
has_more_data = True
|
||||
return (alarms, has_more_data)
|
||||
|
||||
|
||||
def alarm_delete(request, alarm_id):
|
||||
return monclient(request).alarm.delete(alarm_id)
|
||||
|
||||
|
||||
def alarm_get(request, alarm_id):
|
||||
return monclient(request).alarm.get(alarm_id)
|
||||
|
||||
|
||||
def alarm_create(request, password=None, **kwargs):
|
||||
return monclient(request, password).alarm.create(**kwargs)
|
||||
|
||||
|
||||
def alarm_update(request, alarm_id, **kwargs):
|
||||
return monclient(request).alarm.update(alarm_id, **kwargs)
|
||||
|
BIN
monitoring/api/monitoring.pyc
Normal file
BIN
monitoring/api/monitoring.pyc
Normal file
Binary file not shown.
@ -1,11 +0,0 @@
|
||||
|
||||
<div ng-controller="alarmController">
|
||||
<div class="gridStyle" ng-grid="gridOptions">
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.gridStyle {
|
||||
border: 1px solid rgb(212,212,212);
|
||||
height: 300px;
|
||||
}
|
||||
</style>
|
@ -1,118 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>CoverFlow</title>
|
||||
<style>
|
||||
html { height: 100%; }
|
||||
body { background-image: -webkit-radial-gradient(gray 0%, black 100%); }
|
||||
|
||||
#coverflow {
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
overflow: hidden;
|
||||
margin: 100px auto;
|
||||
-webkit-perspective: 500;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
-webkit-transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
|
||||
#container {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
margin-left: 350px;
|
||||
background-color: transparent;
|
||||
-webkit-transition: all 400ms ease-in-out;
|
||||
}
|
||||
|
||||
.holder {
|
||||
float: left;
|
||||
position: absolute;
|
||||
margin-top: 100px;
|
||||
margin-left: 20px;
|
||||
-webkit-transition: all 300ms ease-in-out;
|
||||
-webkit-box-reflect: below 4px
|
||||
-webkit-gradient(
|
||||
linear,
|
||||
left top,
|
||||
left bottom,
|
||||
color-stop(0, rgba(255, 255, 255, 0)),
|
||||
color-stop(.5, rgba(255, 255, 255, .3)),
|
||||
color-stop(1, rgba(255, 255, 255, .3))
|
||||
);
|
||||
}
|
||||
|
||||
.slider {
|
||||
position: absolute;
|
||||
width: 200px;
|
||||
height: 30px;
|
||||
margin: 0 0 0 430px;
|
||||
-webkit-appearance: none !important;
|
||||
border-radius: 6px;
|
||||
border: 1px solid white;
|
||||
background: #999;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.slider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none !important;
|
||||
width: 50px;
|
||||
height: 18px;
|
||||
border-radius: 8px;
|
||||
border: 2px solid #fff;
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #999), color-stop(.5, #000) );
|
||||
}
|
||||
|
||||
#log { color: white; font-size: 30pt; }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body onload="flow()">
|
||||
|
||||
<div id="coverflow">
|
||||
<div id="container">
|
||||
<div class="holder" id="1"><img src="../img/1.jpg" width="200"></div>
|
||||
<div class="holder" id="2"><img src="../img/2.jpg" width="200"></div>
|
||||
<div class="holder" id="3"><img src="../img/3.jpg" width="200"></div>
|
||||
<div class="holder" id="4"><img src="../img/4.jpg" width="200"></div>
|
||||
<div class="holder" id="5"><img src="../img/5.jpg" width="200"></div>
|
||||
<div class="holder" id="6"><img src="../img/6.jpg" width="200"></div>
|
||||
<div class="holder" id="7"><img src="../img/7.jpg" width="200"></div>
|
||||
<div class="holder" id="8"><img src="../img/8.jpg" width="200"></div>
|
||||
<div class="holder" id="9"><img src="../img/9.jpg" width="200"></div>
|
||||
<div class="holder" id="10"><img src="../img/1.jpg" width="200"></div>
|
||||
<div class="holder" id="11"><img src="../img/2.jpg" width="200"></div>
|
||||
</div>
|
||||
</div>
|
||||
<input id="slider" class="slider" type="range" min="1" max="11" value="6" onchange="flow();">
|
||||
<a id="log">value</a>
|
||||
<script>
|
||||
function flow() {
|
||||
|
||||
var space = 2;
|
||||
var coverCount = 11;
|
||||
var current = slider.value;
|
||||
var cover = document.getElementById(current + "");
|
||||
var position = [0, 230, 180, 130, 80, 30, -20, -70, -120, -170, -220, -270];
|
||||
|
||||
for (var i = current; i < (coverCount +1); i++)
|
||||
{
|
||||
document.getElementById(i + "").style.webkitTransform = "translate3d("+((i+space)*50)+"px,0,-10px) rotateY(-65deg)";
|
||||
document.getElementById(i + "").style.zIndex = -i + "";
|
||||
}
|
||||
|
||||
for (var i = 1; i < current; i++)
|
||||
{
|
||||
document.getElementById(i + "").style.webkitTransform = "translate3d("+((i-space)*50)+"px,0,-10px) rotateY(65deg)";
|
||||
document.getElementById(i + "").style.zIndex = i + "";
|
||||
}
|
||||
|
||||
cover.style.webkitTransform = "translate3d("+(slider.value*50)+"px,0,100px) rotateY(0deg)";
|
||||
cover.style.zIndex = current + "";
|
||||
document.getElementById("container").style.marginLeft = position[current] + "px";
|
||||
document.getElementById("log").innerHTML = slider.value + "";
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -1,52 +0,0 @@
|
||||
var monitoringAnimations = angular.module('monitoring.animations', ['ngAnimate']);
|
||||
|
||||
monitoringAnimations.animation('.phone', function() {
|
||||
|
||||
var animateUp = function(element, className, done) {
|
||||
if(className != 'active') {
|
||||
return;
|
||||
}
|
||||
element.css({
|
||||
position: 'absolute',
|
||||
top: 500,
|
||||
left: 0,
|
||||
display: 'block'
|
||||
});
|
||||
|
||||
jQuery(element).animate({
|
||||
top: 0
|
||||
}, done);
|
||||
|
||||
return function(cancel) {
|
||||
if(cancel) {
|
||||
element.stop();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var animateDown = function(element, className, done) {
|
||||
if(className != 'active') {
|
||||
return;
|
||||
}
|
||||
element.css({
|
||||
position: 'absolute',
|
||||
left: 0,
|
||||
top: 0
|
||||
});
|
||||
|
||||
jQuery(element).animate({
|
||||
top: -500
|
||||
}, done);
|
||||
|
||||
return function(cancel) {
|
||||
if(cancel) {
|
||||
element.stop();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
addClass: animateUp,
|
||||
removeClass: animateDown
|
||||
};
|
||||
});
|
@ -1,61 +1,7 @@
|
||||
'use strict';
|
||||
angular.module('monitoring.controllers', [])
|
||||
.controller('monitoringController', function ($scope, $http) {
|
||||
$scope._serviceModel = [{'name': 'Platform Services',
|
||||
'services': [{'name': 'MaaS',
|
||||
'display': 'MaaS'},
|
||||
{'name': 'DBaaS',
|
||||
'display': 'DBaaS'},
|
||||
{'name': 'LBaaS',
|
||||
'display': 'LBaaS'},
|
||||
{'name': 'DNSaaS',
|
||||
'display': 'DNSaaS'},
|
||||
{'name': 'MSGaaS',
|
||||
'display': 'MSGaaS'},
|
||||
]},
|
||||
{'name': 'The OverCloud Services',
|
||||
'services': [{'name': 'nova',
|
||||
'display': 'Nova'},
|
||||
{'name': 'swift',
|
||||
'display': 'Swift'},
|
||||
{'name': 'bock',
|
||||
'display': 'Cinder'},
|
||||
{'name': 'glance',
|
||||
'display': 'Glance'},
|
||||
{'name': 'quantum',
|
||||
'display': 'Neutron'},
|
||||
{'name': 'mysql',
|
||||
'display': 'MySQL'},
|
||||
{'name': 'rabbitmq',
|
||||
'display': 'RabbitMQ'},
|
||||
]},
|
||||
{'name': 'The UnderCloud Services',
|
||||
'services': [{'name': 'nova',
|
||||
'display': 'Nova'},
|
||||
{'name': 'swift',
|
||||
'display': 'Cinder'},
|
||||
{'name': 'glance',
|
||||
'display': 'Glance'},
|
||||
{'name': 'horizon',
|
||||
'display': 'Horizon'},
|
||||
]},
|
||||
{'name': 'Network Services',
|
||||
'services': [{'name': 'dhcp',
|
||||
'display': 'DHCP'},
|
||||
{'name': 'dns',
|
||||
'display': 'DNS'},
|
||||
{'name': 'dns-servers',
|
||||
'display': 'DNS Servers'},
|
||||
{'name': 'http',
|
||||
'display': 'http'},
|
||||
{'name': 'web_proxy',
|
||||
'display': 'Web Proxy'}
|
||||
]}
|
||||
]
|
||||
$scope.setStatus = function() {
|
||||
$scope.fetchStatus()
|
||||
};
|
||||
$scope.fetchStatus = function() {
|
||||
$scope.fetchStatus = function() {
|
||||
$http({method: 'GET', url: '/admin/monitoring/status'}).
|
||||
success(function(data, status, headers, config) {
|
||||
// this callback will be called asynchronously
|
||||
@ -76,22 +22,7 @@ angular.module('monitoring.controllers', [])
|
||||
alert("error")
|
||||
});
|
||||
}
|
||||
$scope.serviceModel = function() {
|
||||
$scope.setStatus()
|
||||
return $scope._serviceModel
|
||||
}
|
||||
$scope.current = 1;
|
||||
$scope.showService = function(ev) {
|
||||
// href="#/alarms/{{service.name}}"
|
||||
console.log(ev.clientX, ev.clientY);
|
||||
//$("#current"+$scope.current)[0].style.webkitTransform = "scale3d(10, 10, +1)"
|
||||
//$("#current"+$scope.current).style.opacity = "0"
|
||||
//$("#current"+$scope.current).style.visibility = false
|
||||
$scope.current += 1;
|
||||
//$("#current"+$scope.current)[0].style.webkitTransform = "translate3d(0,-400px,-1)"
|
||||
};
|
||||
$scope.format = 'M/d/yy h:mm:ss a';
|
||||
})
|
||||
})
|
||||
.controller('alarmController', function($scope) {
|
||||
$scope.myData = [{name: "API Response Time", status: 'Normal'},
|
||||
{name: "System Health", status: 'Normal'},
|
||||
@ -102,23 +33,6 @@ angular.module('monitoring.controllers', [])
|
||||
columnDefs: [{field:'name', displayName:'Name'}, {field:'status', displayName:'Status'}]};
|
||||
});
|
||||
|
||||
function getRandomStatusValue() {
|
||||
var distribution = [
|
||||
{prob:.04, value:'alert-error'},
|
||||
{prob:.04, value:'alert-warning'},
|
||||
{prob:.04, value:'alert-unknown'},
|
||||
{prob:.04, value:'alert-notfound'},
|
||||
{value:'alert-success'},
|
||||
]
|
||||
var num = Math.random()
|
||||
for (var i=0; i < distribution.length - 1; i++) {
|
||||
if (num < distribution[i]["prob"])
|
||||
return distribution[i]["value"]
|
||||
num = num - distribution[i]["prob"]
|
||||
}
|
||||
return distribution[distribution.length - 1]["value"]
|
||||
}
|
||||
|
||||
function getIcon(status) {
|
||||
if (status === 'alert-error')
|
||||
return '/static/monitoring/img/critical-icon.png'
|
||||
|
@ -1,5 +1,4 @@
|
||||
<script src='{{ STATIC_URL }}monitoring/controllers.js' type='text/javascript' charset='utf-8'></script>
|
||||
<script src='{{ STATIC_URL }}monitoring/js/directives.js' type='text/javascript' charset='utf-8'></script>
|
||||
<script src='{{ STATIC_URL }}monitoring/app.js' type='text/javascript' charset='utf-8'></script>
|
||||
<script src="{{ STATIC_URL }}horizon/lib/ng-grid/ng-grid-2.0.7.debug.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ STATIC_URL }}horizon/lib/angular/angular-route.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ STATIC_URL }}horizon/lib/angular/angular-animate.js" type="text/javascript" charset="utf-8"></script>
|
@ -7,5 +7,5 @@
|
||||
{% endblock page_header %}
|
||||
{% load url from future %}
|
||||
{% block main %}
|
||||
{% include 'admin/monitoring/monitorng.html' %}
|
||||
{% include 'admin/monitoring/newmonitor.html' %}
|
||||
{% endblock %}
|
@ -1,5 +1,4 @@
|
||||
|
||||
<div ng-app="modalTest">
|
||||
<div>
|
||||
<div>
|
||||
{% for group in service_groups %}
|
||||
<div class="alert alert-block fade in" style="background:#F1F1F1;color:black;font-weight: bold;">
|
||||
|
@ -19,27 +19,28 @@ border-color: blue;
|
||||
color: lightgrey;
|
||||
}
|
||||
.diagram {
|
||||
-webkit-transition: all 600ms ease-in-out;
|
||||
background-color: darkgray;
|
||||
padding: 5px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<div ng-controller = "monitoringController" ng-init="fetchStatus()">
|
||||
Current time is: <span my-current-time="format"></span> <button ng-click="fetchStatus()">Refresh</button>
|
||||
<div id="current1" class="diagram">
|
||||
<div class="alert alert-block fade in" style="background:#E1E1E1;color:black;" ng-repeat="group in _serviceModel">
|
||||
<div>
|
||||
{{ group.name }}
|
||||
{$ group.name $}
|
||||
</div>
|
||||
<div ng-repeat="service in group.services" style="display:inline-block; margin-bottom:4px;">
|
||||
<a ng-click="showService($event)">
|
||||
<div class="alert alert-block {{ service.class }} fade in" style="display: inline-block; margin:2px;">
|
||||
|
||||
<img style="margin-right:5px;vertical-align:top;" ng-src="{{ service.icon }}"/>
|
||||
{{ service.display }}
|
||||
<a href="{% url 'horizon:admin:monitoring:alert' 'nova' %}" ng-click="showService($event)">
|
||||
<div class="alert alert-block {$ service.class $} fade in" style="display: inline-block; margin:2px;">
|
||||
<img style="margin-right:5px;vertical-align:top;" ng-src="{$ service.icon $}"/>
|
||||
{$ service.display $}
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src='{{ STATIC_URL }}monitoring/js/app.js' type='text/javascript' charset='utf-8'></script>
|
||||
<script src='{{ STATIC_URL }}monitoring/js/controllers.js' type='text/javascript' charset='utf-8'></script>
|
||||
<script src='{{ STATIC_URL }}monitoring/js/directives.js' type='text/javascript' charset='utf-8'></script>
|
||||
<script src="{{ STATIC_URL }}horizon/lib/angular/angular-route.js" type="text/javascript" charset="utf-8"></script>
|
@ -24,9 +24,11 @@ from django.utils.translation import ugettext as _
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from horizon import tables
|
||||
|
||||
from monitoring.api import monitoring
|
||||
|
||||
from .tables import AlertsTable
|
||||
from .tables import AlertHistoryTable
|
||||
from openstack_dashboard import api
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@ -140,7 +142,7 @@ class StatusView(TemplateView):
|
||||
def get(self, request, *args, **kwargs):
|
||||
services = ['MaaS',
|
||||
]
|
||||
#api.monitoring.alarm_list(self.request)
|
||||
#monitoring.alarm_list(self.request)
|
||||
for group in SAMPLE:
|
||||
for service in group['services']:
|
||||
service['class'] = get_random_status()
|
||||
@ -151,21 +153,6 @@ class StatusView(TemplateView):
|
||||
return HttpResponse(json.dumps(ret),
|
||||
content_type='application/json')
|
||||
|
||||
def get_random_status():
|
||||
distribution = [
|
||||
{'prob':.04, 'value':'alert-error'},
|
||||
{'prob':.04, 'value':'alert-warning'},
|
||||
{'prob':.04, 'value':'alert-unknown'},
|
||||
{'prob':.04, 'value':'alert-notfound'},
|
||||
{'prob':1.0, 'value':'alert-success'},
|
||||
]
|
||||
num = random.random()
|
||||
for dist in distribution:
|
||||
if num < dist["prob"]:
|
||||
return dist["value"]
|
||||
num = num - dist["prob"]
|
||||
return distribution[len(distribution) - 1]["value"]
|
||||
|
||||
|
||||
class AlertView(tables.DataTableView):
|
||||
table_class = AlertsTable
|
||||
@ -224,3 +211,19 @@ class AlertHistoryView(tables.DataTableView):
|
||||
|
||||
class AlertMeterView(TemplateView):
|
||||
template_name = 'admin/monitoring/alert_meter.html'
|
||||
|
||||
|
||||
def get_random_status():
|
||||
distribution = [
|
||||
{'prob':.04, 'value':'alert-error'},
|
||||
{'prob':.04, 'value':'alert-warning'},
|
||||
{'prob':.04, 'value':'alert-unknown'},
|
||||
{'prob':.04, 'value':'alert-notfound'},
|
||||
{'prob':1.0, 'value':'alert-success'},
|
||||
]
|
||||
num = random.random()
|
||||
for dist in distribution:
|
||||
if num < dist["prob"]:
|
||||
return dist["value"]
|
||||
num = num - dist["prob"]
|
||||
return distribution[len(distribution) - 1]["value"]
|
Loading…
Reference in New Issue
Block a user