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\"Karl-Heine-Strasse\"\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\"Dachcam\"\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\"Karl-Heine-Strasse\"\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" %}


- Webcam im Fenster + {% thumbnail "karlheine_cam.jpg" "200" upscale=False as image %} + Webcam im Fenster + {% endthumbnail %}
- Temperaturen im sublab + {% thumbnail "tempgraph.png" "200" upscale=False as image %} + Temperaturen im sublab + {% endthumbnail %}

Mitglied werden -- cgit v1.2.1