Skip to content
Snippets Groups Projects
Commit 05590de5 authored by Tim Fechner's avatar Tim Fechner Committed by Tim Fechner
Browse files

Close #17, avoid json handling using properties

parent c1ad6535
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,7 @@ class NetworkInterfaceInline(admin.TabularInline):
class MinionAdmin(admin.ModelAdmin):
inlines = [NetworkInterfaceInline]
readonly_fields = ('fqdn', 'data', 'last_updated')
exclude = ('_data',)
admin.site.register(Minion, MinionAdmin)
......
......@@ -26,12 +26,10 @@ class Command(ApiCommand, BaseCommand):
''' Update minions related to grains we got '''
minion = Minion.objects.filter(fqdn=fqdn).first()
if minion:
data = json.loads(minion.data)
data['grains'] = grains
minion.data = json.dumps(data)
minion.update_data({'grains': grains})
minion.last_updated = timezone.now()
else:
minion = Minion(fqdn=fqdn, data=json.dumps({'grains': grains}), last_updated=timezone.now())
minion = Minion(fqdn=fqdn, data={'grains': grains}, last_updated=timezone.now())
minion.save()
return minion
......
......@@ -15,12 +15,7 @@ class Command(ApiCommand, BaseCommand):
for minion_fqdn, devices in mount_point_devices.items():
minion = Minion.objects.filter(fqdn=minion_fqdn).first()
minion_data = json.loads(minion.data)
mounted_devices = devices
minion_data['mounted_devices'] = mounted_devices
minion.data = json.dumps(minion_data)
minion.update_data({'mounted_devices': devices})
minion.save()
def handle(self, *args, **kwargs):
......
......@@ -16,7 +16,6 @@ class Command(ApiCommand, BaseCommand):
for minion_fqdn, minion_packages in packages.items():
minion = Minion.objects.filter(fqdn=minion_fqdn).first()
minion_data = json.loads(minion.data)
minion_package_data = {}
for minion_package_name, minion_package_version in minion_packages.items():
......@@ -30,8 +29,7 @@ class Command(ApiCommand, BaseCommand):
}
})
minion_data['packages'] = minion_package_data
minion.data = json.dumps(minion_data)
minion.update_data({'packages': minion_package_data})
minion.save()
def handle(self, *args, **kwargs):
......
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-07-12 07:17
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('salt_observer', '0006_auto_20160707_1629'),
]
operations = [
migrations.RenameField(
model_name='minion',
old_name='data',
new_name='_data',
),
]
......@@ -29,28 +29,43 @@ class Minion(MarkdownContent):
fqdn = models.CharField(max_length=255)
networks = models.ManyToManyField(Network, through='NetworkInterface')
data = models.TextField(default='{}')
_data = models.TextField(default='{}')
last_updated = models.DateTimeField()
@property
def get_data(self):
return json.loads(self.data)
def data(self):
try:
return json.loads(self._data)
except ValueError:
return dict()
@data.setter
def data(self, value):
self._data = json.dumps(value)
def update_data(self, value):
''' In order to update self.data without 3 lines of code
self.data.update() wont work!
'''
data = self.data
data.update(value)
self.data = data
@property
def user_count(self):
return len(self.get_data.get('grains', {}).get('users', []))
return len(self.data.get('grains', {}).get('users', []))
@property
def package_count(self):
return len(self.get_data.get('packages', []))
return len(self.data.get('packages', []))
@property
def network_count(self):
return len(self.networks.all())
def outdated_package_count(self):
return len([p for p, v in self.get_data.get('packages').items() if v['latest_version']])
return len([p for p, v in self.data.get('packages', {}).items() if v['latest_version']])
def __str__(self):
return self.fqdn
......
......@@ -69,24 +69,24 @@
<tbody>
<tr>
<td>Operating system</td>
<td>{{ minion.get_data.grains.os }} {{ minion.get_data.grains.osrelease }} {{ minion.get_data.grains.oscodename }} <span class="text-muted">({{ minion.get_data.grains.osarch }})</span></td>
<td>{{ minion.data.grains.os }} {{ minion.data.grains.osrelease }} {{ minion.data.grains.oscodename }} <span class="text-muted">({{ minion.data.grains.osarch }})</span></td>
</tr>
<tr>
<td>Salt version</td>
<td>{{ minion.get_data.grains.saltversion }}</td>
<td>{{ minion.data.grains.saltversion }}</td>
</tr>
<tr>
<td>CPU</td>
<td>{{ minion.get_data.grains.num_cpus }} Cores <span class="text-muted">({{ minion.get_data.grains.cpuarch }})</span></td>
<td>{{ minion.data.grains.num_cpus }} Cores <span class="text-muted">({{ minion.data.grains.cpuarch }})</span></td>
</tr>
<tr>
<td>RAM</td>
<td>{{ minion.get_data.grains.mem_total }} Mb</td>
<td>{{ minion.data.grains.mem_total }} Mb</td>
</tr>
<tr>
<td>VM Ware status</td>
<td>
{% with minion.get_data.grains|get:"vmware-tools-status" as vmwarestatus %}
{% with minion.data.grains|get:"vmware-tools-status" as vmwarestatus %}
{% if vmwarestatus == 'NOT-INSTALLED' %}
<span class="text-danger"><i class="fa fa-fw fa-times"></i> Not installed</span>
{% elif vmwarestatus == 'OUT-OF-DATE' %}
......@@ -99,11 +99,11 @@
</tr>
<tr>
<td>Kernel version</td>
<td>{{ minion.get_data.grains.kernel }} {{ minion.get_data.grains.kernelrelease }}</td>
<td>{{ minion.data.grains.kernel }} {{ minion.data.grains.kernelrelease }}</td>
</tr>
<tr>
<td>Bios version</td>
<td>{{ minion.get_data.grains.biosreleasedate }}</td>
<td>{{ minion.data.grains.biosreleasedate }}</td>
</tr>
</tbody>
</table>
......@@ -162,7 +162,7 @@
</tr>
</thead>
<tbody>
{% for package, versions in minion.get_data.packages.items %}
{% for package, versions in minion.data.packages.items %}
<tr {% if versions.latest_version != '' %}class="warning"{% endif %}>
<td>{{ package }}</td>
<td>{{ versions.version }}</td>
......@@ -195,7 +195,7 @@
</tr>
</thead>
<tbody>
{% for user in minion.get_data.grains.users %}
{% for user in minion.data.grains.users %}
<tr data-uid="{{ user.id }}">
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
......@@ -218,7 +218,7 @@
</tr>
</thead>
<tbody>
{% for device in minion.get_data.mounted_devices %}
{% for device in minion.data.mounted_devices %}
<tr class="{% if device.percent > 90 %}danger{% elif device.percent > 65 %}warning{% endif %}">
<td><samp>{{ device.device }}</samp></td>
<td><samp>{{ device.mountpoint }}</samp></td>
......
......@@ -53,7 +53,7 @@
{% for minion in minion_list %}
<tr>
<td><a href="{% url 'minion-detail' minion.fqdn %}">{{ minion }}</a></td>
<td><code>{{ minion.get_data.grains.os }} {{ minion.get_data.grains.osrelease }} {{ minion.get_data.grains.oscodename }}</code></td>
<td><code>{{ minion.data.grains.os }} {{ minion.data.grains.osrelease }} {{ minion.data.grains.oscodename }}</code></td>
<td>{{ minion.network_count }}</td>
<td>{{ minion.user_count }}</td>
<td>{{ minion.package_count }} {% if minion.outdated_package_count %}<small class="text-danger">({{ minion.outdated_package_count }})</small>{% endif %}</td>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment