~johnsca/charms/trusty/rsyslog-forwarder-ha/cwr

« back to all changes in this revision

Viewing changes to hooks/model.py

  • Committer: Jorge Niedbalski R.
  • Date: 2014-04-25 22:18:46 UTC
  • Revision ID: jorge.niedbalski@canonical.com-20140425221846-4pi72asyjdyncxme
[charm] initial import of new forwarder-ha charm

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
# -*- coding: utf-8 -*-
 
3
 
 
4
__author__ = 'Jorge Niedbalski R. <jorge.niedbalski@canonical.com>'
 
5
 
 
6
from charmhelpers import fetch
 
7
 
 
8
try:
 
9
    import sqlalchemy
 
10
except ImportError:
 
11
    fetch.apt_install("python-sqlalchemy")
 
12
 
 
13
from sqlalchemy import Column, Integer, String, DateTime
 
14
from sqlalchemy.ext.declarative import declarative_base
 
15
from sqlalchemy import create_engine
 
16
from sqlalchemy.orm import sessionmaker
 
17
from sqlalchemy.orm.exc import NoResultFound
 
18
 
 
19
import os
 
20
import datetime
 
21
 
 
22
 
 
23
DEFAULT_SQLITE_PATH = os.path.expanduser("~/.rsyslog-servers.db")
 
24
 
 
25
Base = declarative_base()
 
26
 
 
27
engine = create_engine('sqlite:///%s' % DEFAULT_SQLITE_PATH)
 
28
Session = sessionmaker(bind=engine)
 
29
session = Session()
 
30
 
 
31
 
 
32
class Server(Base):
 
33
    __tablename__ = 'server'
 
34
 
 
35
    id = Column(Integer, primary_key=True)
 
36
    relation_id = Column(String(250), nullable=False)
 
37
    created = Column(DateTime, default=datetime.datetime.now)
 
38
    remote_unit = Column(String(250))
 
39
    private_address = Column(String(250))
 
40
 
 
41
    @classmethod
 
42
    def remove(cls, relation_id):
 
43
        try:
 
44
            server = session.query(Server).filter_by(
 
45
                relation_id=relation_id).one()
 
46
            session.delete(server)
 
47
            session.commit()
 
48
        except:
 
49
            session.rollback()
 
50
            raise
 
51
 
 
52
    @classmethod
 
53
    def has_relation(cls, relation_id):
 
54
        try:
 
55
            session.query(cls).filter_by(
 
56
                relation_id=relation_id).one()
 
57
        except NoResultFound:
 
58
            return False
 
59
        return True
 
60
 
 
61
    @classmethod
 
62
    def get_or_create(cls, **params):
 
63
        try:
 
64
            server = session.query(Server).filter_by(
 
65
                relation_id=params.get('relation_id')).one()
 
66
        except:
 
67
            server = cls(relation_id=params.get('relation_id'),
 
68
                         remote_unit=params.get('remote_unit'),
 
69
                         private_address=params.get('unit_private_ip'))
 
70
            try:
 
71
                session.add(server)
 
72
                session.commit()
 
73
            except:
 
74
                session.rollback()
 
75
        return server
 
76
 
 
77
 
 
78
def setup_local_database():
 
79
    Base.metadata.create_all(engine)
 
80
 
 
81
try:
 
82
    setup_local_database()
 
83
except:
 
84
    pass