diff --git a/rattail_demo/web/templates/menu.mako b/rattail_demo/web/templates/menu.mako
index 5571b55..522852d 100644
--- a/rattail_demo/web/templates/menu.mako
+++ b/rattail_demo/web/templates/menu.mako
@@ -73,6 +73,23 @@
% endif
+ % if request.has_any_perm('tempmon.clients.list', 'tempmon.probes.list', 'tempmon.readings.list'):
+
+ TempMon
+
+ % if request.has_perm('tempmon.clients.list'):
+ - ${h.link_to("Clients", url('tempmon.clients'))}
+ % endif
+ % if request.has_perm('tempmon.probes.list'):
+ - ${h.link_to("Probes", url('tempmon.probes'))}
+ % endif
+ % if request.has_perm('tempmon.readings.list'):
+ - ${h.link_to("Readings", url('tempmon.readings'))}
+ % endif
+
+
+ % endif
+
% if request.has_any_perm('users.list', 'roles.list', 'settings.list'):
Admin
diff --git a/rattail_demo/web/views/__init__.py b/rattail_demo/web/views/__init__.py
index 9fc60c9..2b5837a 100644
--- a/rattail_demo/web/views/__init__.py
+++ b/rattail_demo/web/views/__init__.py
@@ -42,6 +42,7 @@ def includeme(config):
config.include('tailbone.views.settings')
config.include('tailbone.views.stores')
config.include('tailbone.views.subdepartments')
+ config.include('rattail_demo.web.views.tempmon')
config.include('rattail_demo.web.views.users')
config.include('tailbone.views.vendors')
diff --git a/rattail_demo/web/views/tempmon.py b/rattail_demo/web/views/tempmon.py
new file mode 100644
index 0000000..d02c050
--- /dev/null
+++ b/rattail_demo/web/views/tempmon.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+"""
+Tempmon views
+"""
+
+from __future__ import unicode_literals, absolute_import
+
+from tailbone.views.tempmon.clients import TempmonClientView as BaseTempmonClientView
+from tailbone.views.tempmon.probes import TempmonProbeView as BaseTempmonProbeView
+
+
+class TempmonClientView(BaseTempmonClientView):
+ """
+ Prevent edit/delete for 'demo' client
+ """
+
+ def editable_instance(self, client):
+ return client.config_key != 'demo'
+
+ def deletable_instance(self, client):
+ return client.config_key != 'demo'
+
+
+class TempmonProbeView(BaseTempmonProbeView):
+ """
+ Prevent edit/delete for 'demo' probe
+ """
+
+ def editable_instance(self, probe):
+ return probe.config_key != 'demo'
+
+ def deletable_instance(self, probe):
+ return probe.config_key != 'demo'
+
+
+def includeme(config):
+ TempmonClientView.defaults(config)
+ TempmonProbeView.defaults(config)
+ config.include('tailbone.views.tempmon.readings')