# import the basic Elixir classes and functions for declaring the data model
# (see http://elixir.ematia.de/trac/wiki/TutorialDivingIn)
from elixir import EntityMeta, Entity, Field, OneToMany, ManyToOne, ManyToMany
-from elixir import options_defaults, using_options, setup_all, metadata, entities
+from elixir import options_defaults, using_options, setup_all, entities
# import some datatypes for table columns from Elixir
# (see http://www.sqlalchemy.org/docs/04/types.html for more)
from elixir import String, Unicode, Integer, DateTime
import defines
+from monitor.database.dborm import zab_metadata, zab_session
-#from elixir import metadata
-#from monitor.database.dborm import zabbix_db, zabbix_session
-#__metadata__ = zabbix_db
-#__session__ = zabbix_session
+__metadata__ = zab_metadata
+__session__ = zab_session
# TODO:
# - declare association between Media and MediaType so that look ups can
autoload=True,
)
+class Escalation(ZabbixEntity):
+ using_options(
+ tablename='escalations',
+ autoload=True,
+ auto_primarykey='escalationid'
+ )
+
+class Event(ZabbixEntity):
+ using_options(
+ tablename='events',
+ autoload=True,
+ auto_primarykey='eventid'
+ )
+
+class Item(ZabbixEntity):
+ using_options(
+ tablename='items',
+ autoload=True,
+ auto_primarykey='itemid'
+ )
+
+class Acknowledge(ZabbixEntity):
+ using_options(
+ tablename='acknowledges',
+ autoload=True,
+ auto_primarykey='acknowledgeid'
+ )
+
+class Trigger(ZabbixEntity):
+ using_options(
+ tablename='triggers',
+ autoload=True,
+ auto_primarykey='triggerid'
+ )
+
+
class Right(ZabbixEntity):
# rights of a usergroup to interact with hosts of a hostgroup
using_options(
# currently since the rights table is merely treated as an intermediate
# table for the m2m between usrgrp and groups.
-rights = Table('rights', metadata, autoload=True)
-hostsgroups = Table('hosts_groups', metadata, autoload=True)
+rights = Table('rights', __metadata__, autoload=True)
+hostsgroups = Table('hosts_groups', __metadata__, autoload=True)
+hoststemplates = Table('hosts_templates', __metadata__, autoload=True)
# m2m table between hosts and groups below
auto_primarykey='hostgroupid',
)
+class HostsTemplates(ZabbixEntity):
+ using_options(
+ tablename='hosts_templates',
+ autoload=True,
+ auto_primarykey='hosttemplateid',
+ )
+
class Host(ZabbixEntity):
using_options(
tablename='hosts',
primaryjoin=lambda: Host.hostid==hostsgroups.c.hostid,
secondaryjoin=lambda: HostGroup.groupid==hostsgroups.c.groupid,
)
+ template_list = ManyToMany(
+ 'Host',
+ table=hoststemplates,
+ foreign_keys=lambda: [hoststemplates.c.hostid, hoststemplates.c.templateid],
+ primaryjoin=lambda: Host.hostid==hoststemplates.c.hostid,
+ secondaryjoin=lambda: Host.hostid==hoststemplates.c.templateid,
+ )
+
+ def append_template(self, template):
+ row = HostsTemplates(hostid=self.hostid, templateid=template.hostid)
+ return template
+
+ def remove_template(self, template):
+ row = HostsTemplates.get_by(hostid=self.hostid, templateid=template.hostid)
+ if row is not None:
+ row.delete()
+
def delete(self):
# NOTE: media objects are automatically handled.
+ hosts_templates_match = HostsTemplates.query.filter_by(hostid=self.hostid).all()
+ for row in hosts_templates_match:
+ row.delete()
+
hosts_groups_match = HostsGroups.query.filter_by(hostid=self.hostid).all()
for row in hosts_groups_match:
row.delete()
foreign_keys=lambda: [Media.userid],
ondelete='cascade')
-users_groups = Table('users_groups', metadata, autoload=True)
+users_groups = Table('users_groups', __metadata__, autoload=True)
class User(ZabbixEntity): # parent of media
using_options(