From 9f9d7489b5b6b34f4be3ef57ae644b96aa3d7e4b Mon Sep 17 00:00:00 2001
From: Christian Franke
Date: Mon, 16 Jan 2012 18:28:52 +0100
Subject: Add tasks which fetch webcam images
---
sublab_project/fixtures/flatpages.json | 2 +-
sublab_project/sublab_monitor/tasks.py | 69 +++++++++++++++++++++++++++++++++-
sublab_project/templates/base.html | 9 ++++-
3 files changed, 76 insertions(+), 4 deletions(-)
diff --git a/sublab_project/fixtures/flatpages.json b/sublab_project/fixtures/flatpages.json
index 09077dd..9fa5991 100644
--- a/sublab_project/fixtures/flatpages.json
+++ b/sublab_project/fixtures/flatpages.json
@@ -115,7 +115,7 @@
"sites": [
1
],
- "content": "Webcams
\r\n\r\n\tIm sublab befinden sich mehrere Webcams.\r\n\tDie Aufnahmen einiger Webcams werden hier zur Verf\u00fcgung gestellt.\r\n
\r\n\r\n\tPeriskop\r\n
\r\n\r\n\t

\r\n
\r\n\r\n\tDiese Webcam zeigt den Blick nach Westen aus unseren Fenstern, entlang der Karl-Heine-Stra\u00dfe. Linker Hand befindet sich die GaraGe, im Vordergrund die Villa (auf dem Westwerkgel\u00e4nde), und rechter Hand das Jahrtausendfeld.
\r\n\tIm Hintergrund befindet sich die Baustelle des Taschenkaufhauses.\r\n
\r\n\r\n\tDachcam\r\n
\r\n\r\n\t

\r\n
\r\n\r\n\tAuf dieser Webcam ist ein Blick nach Osten ueber das angrenzende Dach der gro\u00dfen Halle des Westwerks zu sehen.\r\n
\r\n",
+ "content": "Webcams
\r\n\r\n\tIm sublab befinden sich mehrere Webcams.\r\n\tDie Aufnahmen einiger Webcams werden hier zur Verf\u00fcgung gestellt.\r\n
\r\n\r\n\tPeriskop\r\n
\r\n\r\n\t

\r\n
\r\n\r\n\tDiese Webcam zeigt den Blick nach Westen aus unseren Fenstern, entlang der Karl-Heine-Stra\u00dfe. Linker Hand befindet sich die GaraGe, im Vordergrund die Villa (auf dem Westwerkgel\u00e4nde), und rechter Hand das Jahrtausendfeld.
\r\n\tIm Hintergrund befindet sich die Baustelle des Taschenkaufhauses.\r\n
",
"enable_comments": false
}
}
diff --git a/sublab_project/sublab_monitor/tasks.py b/sublab_project/sublab_monitor/tasks.py
index 33dcad6..20f8ad8 100644
--- a/sublab_project/sublab_monitor/tasks.py
+++ b/sublab_project/sublab_monitor/tasks.py
@@ -3,6 +3,11 @@
from datetime import timedelta
from celery.task import PeriodicTask
import subprocess
+import urllib2
+from PIL import Image, ImageOps
+from StringIO import StringIO
+from django.conf import settings
+import os
import sublab_monitor
@@ -14,7 +19,7 @@ class NetworkStatus(PeriodicTask):
'trieste': '172.22.80.4',
'nautilus': '172.22.80.7',
}
- run_every = timedelta(minutes=4)
+ run_every = timedelta(minutes=2)
ignore_result = True
def __init__(self, *args, **kwargs):
@@ -44,3 +49,65 @@ class NetworkStatus(PeriodicTask):
storage.set(host, status)
return repr(results)
+
+
+class ImageFetcher(object):
+ """
+ A task mixin which downloads, processes and stores an Image
+ """
+
+ @property
+ def fetch_url(self):
+ """
+ The location from which the image should be fetched
+ """
+ raise NotImplementedError
+
+ @property
+ def store_name(self):
+ """
+ The name under which the image should be stored
+ """
+ raise NotImplementedError
+
+ def process_image(self, image):
+ """
+ This method may be overwritten to perform some
+ processing on the image
+ """
+ raise NotImplementedError
+
+ def run(self, **kwargs):
+ upstream = urllib2.urlopen(self.fetch_url).read()
+ image = Image.open(StringIO(upstream))
+
+ try:
+ image = self.process_image(image)
+ except NotImplementedError:
+ pass
+
+ fn = os.path.join(settings.MEDIA_ROOT, self.store_name)
+ fn_new = os.path.join(settings.MEDIA_ROOT, 'new-%s' % self.store_name)
+
+ image.save(fn_new)
+ os.rename(fn_new, fn)
+
+
+class EnhancingImageFetcher(ImageFetcher):
+ def process_image(self, image):
+ rv = ImageOps.autocontrast(image)
+ rv.im = ImageOps.unsharp_mask(rv, 10.0, 40, 7)
+
+ return rv
+
+
+class KarlHeineCamFetcher(EnhancingImageFetcher, PeriodicTask):
+ run_every = timedelta(minutes=5)
+ fetch_url = 'http://taifun.local.sublab.org/webcam.jpg'
+ store_name = 'karlheine_cam.jpg'
+
+
+class TempGraphFetcher(ImageFetcher, PeriodicTask):
+ run_every = timedelta(minutes=5)
+ fetch_url = 'http://taifun.local.sublab.org/temperature/temp-2hour.png'
+ store_name = 'tempgraph.png'
diff --git a/sublab_project/templates/base.html b/sublab_project/templates/base.html
index 8dc99b0..1f9346a 100644
--- a/sublab_project/templates/base.html
+++ b/sublab_project/templates/base.html
@@ -1,5 +1,6 @@
{% load host_status %}
{% load flatblock_tags %}
+{% load thumbnail %}
@@ -106,9 +107,13 @@
{% flatblock "motd" %}
-
+ {% thumbnail "karlheine_cam.jpg" "200" upscale=False as image %}
+
+ {% endthumbnail %}
-
+ {% thumbnail "tempgraph.png" "200" upscale=False as image %}
+
+ {% endthumbnail %}
Mitglied werden
--
cgit v1.2.1