예제 #1
0
def saveServiceConfigProp(conn, propname=None, propvalue=None, servicename=None, configname=None):
    """
    save a service config property, for example, which system this config belongs to.
    
    >>> import sqlite3
    >>> from pymasar.service.service import (saveService, retrieveServices)
    >>> from pymasar.service.serviceconfig import (saveServiceConfig, retrieveServiceConfigs)
    >>> from pymasar.db.masarsqlite import (SQL)
    >>> conn = sqlite3.connect(":memory:")
    >>> cur = conn.cursor()
    >>> result = cur.executescript(SQL)
    >>> saveService(conn, 'masar1', desc='non-empty description')
    1
    >>> saveService(conn, 'masar2', desc='non-empty description')
    2
    >>> saveServiceConfig(conn, 'masar1', 'orbit C01', 'BPM horizontal readout for storage ring')
    1
    >>> saveServiceConfig(conn, 'masar2', 'booster orbit', 'Horizontal orbit for booster ring')
    2
    >>> saveServiceConfigProp(conn, 'system', 'SR', 'masar1', 'orbit C01')
    1
    >>> saveServiceConfigProp(conn, 'system', 'booster', 'masar2', 'booster orbit')
    2
    >>> saveServiceConfigProp(conn, 'system', 'booster', 'masar2', 'booster orbit')
    2
    >>> conn.close()
    """
    if servicename is None or configname is None:
        raise Exception("service or service config is empty. Can not associate the event with service and its config.")
    if propname is None or propvalue is None:
        raise Exception("Property name and value can not be empty.")

    checkConnection(conn)

    serviceconfigid = retrieveServiceConfigs(conn, servicename=servicename, configname=configname)[1:]
    if len(serviceconfigid) > 0:
        serviceconfigid = serviceconfigid[0][0]
    else:
        raise Exception("Can not find service config (%s) with service (%s)" % (configname, servicename))
    sql = """
    insert into service_config_prop (service_config_prop_id, service_config_id, service_config_prop_name, service_config_prop_value)
    values (?, ?, ?, ?)
    """
    try:
        cur = conn.cursor()
        # check this entity exists or not.
        cur.execute(
            "select service_config_prop_id from service_config_prop where service_config_id = ? and service_config_prop_name = ? and service_config_prop_value = ?",
            (serviceconfigid, propname, propvalue),
        )
        result = cur.fetchone()
        if result is None:
            cur.execute(sql, (None, serviceconfigid, propname, propvalue))
            result = cur.lastrowid
        else:
            result = result[0]
    except sqlite3.Error, e:
        print("Error %s" % e.args[0])
        raise
예제 #2
0
def saveServiceEvent(conn, servicename, configname, comment=None, approval=False, username=None):
    """
    save an event config, and associate this event with given service and service config.
    
    >>> import sqlite3
    >>> from pymasar.service.service import (saveService, retrieveServices)
    >>> from pymasar.service.serviceconfig import (saveServiceConfig)
    >>> from pymasar.db.masarsqlite import (SQL)
    >>> conn = sqlite3.connect(":memory:")
    >>> cur = conn.cursor()
    >>> result = cur.executescript(SQL)
    >>> saveService(conn, 'masar1', desc='non-empty description')
    1
    >>> saveService(conn, 'masar2', desc='non-empty description')
    2
    >>> saveServiceConfig(conn, 'masar1', 'orbit C01', 'BPM horizontal readout for storage ring')
    1
    >>> saveServiceConfig(conn, 'masar1', 'orbit C02', 'BPM horizontal readout for storage ring')
    2
    >>> saveServiceConfig(conn, 'masar2', 'orbit C01', 'BPM horizontal readout for storage ring')
    3
    >>> saveServiceConfig(conn, 'masar2', 'orbit C02', 'BPM horizontal readout for storage ring')
    4
    >>> result = retrieveServiceConfigs(conn, servicename='masar1', configname='orbit C01')
    >>> saveServiceEvent(conn, servicename='masar1', configname='orbit C01', comment='a service event')
    1
    >>> conn.close()
    """
    if servicename is None or configname is None:
        raise Exception('service or service config is empty. Can not associate the event with service and its config.')
    checkConnection(conn)
    if configname is None:
        raise Exception("service config name is not specified for this event.")
    
    serviceconfigid = retrieveServiceConfigs(conn, servicename=servicename, configname=configname)[1:]
    if len(serviceconfigid) > 0:
        serviceconfigid = serviceconfigid[0][0]
    else:
        raise Exception('Can not find service config (%s) with service (%s)' %(configname, servicename))

    sql = '''
    insert into service_event(service_event_id, service_config_id, service_event_user_tag, service_event_UTC_time, service_event_approval, service_event_user_name)
    values (?, ?, ?, datetime('now'), ?, ?)
    '''
    try:
        cur = conn.cursor()
        
        # each service event is a individual entity. Do not check the existence. 
        cur.execute(sql, (None, serviceconfigid, comment, approval, username))
    except sqlite3.Error, e:
        print ('Error %s' %e.args[0])
        raise
예제 #3
0
def retrieveServiceConfigProps(conn, propname=None, servicename=None, configname=None):
    """
    retrieve a service config property, for example, which system this config belongs to.
    
    >>> import sqlite3
    >>> from pymasar.service.service import (saveService, retrieveServices)
    >>> from pymasar.service.serviceconfig import (saveServiceConfig, retrieveServiceConfigs)
    >>> from pymasar.db.masarsqlite import (SQL)
    >>> conn = sqlite3.connect(":memory:")
    >>> cur = conn.cursor()
    >>> result = cur.executescript(SQL)
    >>> saveService(conn, 'masar1', desc='non-empty description')
    1
    >>> saveService(conn, 'masar2', desc='non-empty description')
    2
    >>> saveServiceConfig(conn, 'masar1', 'orbit C01', 'BPM horizontal readout for storage ring')
    1
    >>> saveServiceConfig(conn, 'masar2', 'booster orbit', 'Horizontal orbit for booster ring')
    2
    >>> saveServiceConfigProp(conn, 'system', 'SR', 'masar1', 'orbit C01')
    1
    >>> saveServiceConfigProp(conn, 'system', 'booster', 'masar2', 'booster orbit')
    2
    >>> retrieveServiceConfigProps(conn)[1:]
    [(1, 1, u'system', u'SR'), (2, 2, u'system', u'booster')]
    >>> retrieveServiceConfigProps(conn, propname='system')[1:]
    [(1, 1, u'system', u'SR'), (2, 2, u'system', u'booster')]
    >>> retrieveServiceConfigProps(conn, propname='system', servicename='masar1', configname='orbit C01')[1:]
    [(1, 1, u'system', u'SR')]
    >>> retrieveServiceConfigProps(conn, propname='system', servicename='masar2', configname='booster orbit')[1:]
    [(2, 2, u'system', u'booster')]
    >>> conn.close()
    """
    checkConnection(conn)

    serviceconfigids = retrieveServiceConfigs(conn, servicename=servicename, configname=configname)[1:]
    serviceconfigid = []
    if len(serviceconfigids) > 0:
        for ids in serviceconfigids:
            serviceconfigid.append(ids[0])
    else:
        raise Exception("Can not find service config (%s) with service (%s)" % (configname, servicename))
    sql = """
    select service_config_prop_id, service_config_id, service_config_prop_name, service_config_prop_value from service_config_prop 
    """
    results = []
    try:
        for configid in serviceconfigid:
            cur = conn.cursor()
            if configid is None and propname is None:
                cur.execute(sql)
            elif serviceconfigid is None:
                cur.execute(sql + " where service_config_prop_name like ?", (propname,))
            elif propname is None:
                cur.execute(sql + " where service_config_id = ?", (configid,))
            else:
                cur.execute(
                    sql + " where service_config_id = ? and service_config_prop_name like ?", (configid, propname)
                )
            result = cur.fetchall()
            if len(result) > 0:
                results.append(result[0])
            else:
                print("Did not find matched service config property.")
    except sqlite3.Error, e:
        print("Error %s" % e.args[0])
        raise