Commit ef431d40 by Bach Dániel

dashboard: Display real graphs for vms #44

parent 937cd1ee
...@@ -37,9 +37,8 @@ ...@@ -37,9 +37,8 @@
</div><!-- id:vm-details-tags --> </div><!-- id:vm-details-tags -->
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<img src="/static/grafikon.png" style="width:45%"/> <img src="{% url "dashboard.views.vm-graph" instance.pk "cpu" "6h" %}" style="width:100%"/>
<img src="/static/grafikon.png" style="width:45%"/> <img src="{% url "dashboard.views.vm-graph" instance.pk "memory" "6h" %}" style="width:100%"/>
<img src="/static/grafikon.png" style="width:45%"/> <img src="{% url "dashboard.views.vm-graph" instance.pk "network" "6h" %}" style="width:100%"/>
<img src="/static/grafikon.png" style="width:45%"/>
</div> </div>
</div> </div>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
</div> </div>
{% for d in instance.disks.all %} {% for d in instance.disks.all %}
<h4 class="list-group-item-heading dashboard-vm-details-network-h3"> <h4 class="list-group-item-heading dashboard-vm-details-network-h3">
<i class="icon-file"></i> {{ d.name }} - {{ d.size|filesize }} <i class="icon-file"></i> {{ d.name }} (#{{ d.id }}) - {{ d.size|filesize }}
</h4> </h4>
{% endfor %} {% endfor %}
</div> </div>
......
...@@ -7,6 +7,7 @@ from .views import ( ...@@ -7,6 +7,7 @@ from .views import (
TransferOwnershipView, TransferOwnershipConfirmView, NodeDelete, TransferOwnershipView, TransferOwnershipConfirmView, NodeDelete,
TemplateList, LeaseDetail, NodeCreate, LeaseCreate, TemplateCreate, TemplateList, LeaseDetail, NodeCreate, LeaseCreate, TemplateCreate,
FavouriteView, NodeStatus, GroupList, TemplateDelete, LeaseDelete, FavouriteView, NodeStatus, GroupList, TemplateDelete, LeaseDelete,
VmGraphView,
) )
urlpatterns = patterns( urlpatterns = patterns(
...@@ -57,4 +58,8 @@ urlpatterns = patterns( ...@@ -57,4 +58,8 @@ urlpatterns = patterns(
name='dashboard.views.favourite'), name='dashboard.views.favourite'),
url(r'^group/list/$', GroupList.as_view(), url(r'^group/list/$', GroupList.as_view(),
name='dashboard.views.group-list'), name='dashboard.views.group-list'),
url((r'^vm/(?P<pk>\d+)/graph/(?P<metric>cpu|memory|network)/'
r'(?P<time>[0-9]+[hdwy])$'),
VmGraphView.as_view(),
name='dashboard.views.vm-graph'),
) )
...@@ -1224,3 +1224,45 @@ class TransferOwnershipConfirmView(LoginRequiredMixin, View): ...@@ -1224,3 +1224,45 @@ class TransferOwnershipConfirmView(LoginRequiredMixin, View):
unicode(user), user.pk, new_owner, key) unicode(user), user.pk, new_owner, key)
raise PermissionDenied() raise PermissionDenied()
return (instance, new_owner) return (instance, new_owner)
class VmGraphView(LoginRequiredMixin, View):
def get(self, request, pk, metric, time, *args, **kwargs):
from urllib import urlencode
import urllib2
if metric not in ['cpu', 'memory', 'network']:
raise SuspiciousOperation()
try:
instance = Instance.objects.get(id=pk)
except Instance.DoesNotExist:
raise Http404()
if not instance.has_level(request.user, 'user'):
raise PermissionDenied()
prefix = 'vm.%s' % instance.vm_name
if metric == 'cpu':
target = ('cactiStyle(alias(derivative(%s.cpu.usage),'
'"cpu usage (%%)"))') % prefix
elif metric == 'memory':
target = ('cactiStyle(alias(%s.memory.usage,'
'"memory usage (%%)"))') % prefix
elif metric == 'network':
target = ('cactiStyle(aliasByMetric('
'derivative(%s.network.bytes_*)))') % prefix
else:
raise SuspiciousOperation()
title = '%s (%s) - %s' % (instance.name, instance.vm_name, metric)
params = urlencode({'target': target,
'from': '-%s' % time,
'title': title.encode('UTF-8')})
url = ('http://%s:%s/render/?width=500&height=200&%s'
% (getenv("GRAPHITE_HOST"),
getenv("GRAPHITE_PORT"),
params))
print url
response = urllib2.urlopen(urllib2.Request(url))
return HttpResponse(response.read(), mimetype="image/png")
print pk, metric
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment