Ejemplo n.º 1
0
    def test_client_has_empty_attributes(self):
        xml = """<?xml version="1.0" encoding="UTF-8"?>
<config>
    <client ip='' />
</config>
"""
        filename = _create_xml(xml)
        xml_root = config.parse_config(filename)
        with self.assertRaisesRegex(RuntimeError,
                                    'Empty attribute .* for .*<client.*'):
            config.parse_clients(xml_root)
Ejemplo n.º 2
0
    def test_valid_with_alerts(self):
        xml = """<?xml version="1.0" encoding="UTF-8"?>
<config>
    <client
        ip='localhost'
        username='******'
        password='******'
        mail='*****@*****.**'
        platform='Linux'>
            <alert type="memory" limit="80%" />
            <alert type="cpu" limit="50%" />
    </client>

    <client
        ip='localhost'
        username='******'
        password='******'
        mail='*****@*****.**'
        platform='Windows'>
            <alert type="memory" limit="80%" />
            <alert type="cpu" limit="50%" />
    </client>
</config>
"""
        filename = _create_xml(xml)
        xml_root = config.parse_config(filename)
        clients = config.parse_clients(xml_root)
        self.assertEqual(2, len(clients))
        self.assertEqual('Linux', clients[0]['platform'])
        self.assertEqual('Windows', clients[1]['platform'])
        self.assertEqual({'memory': 80, 'cpu': 50}, clients[0]['alerts'])
Ejemplo n.º 3
0
    def test_no_clients_returns_empty_list(self):
        xml = """<?xml version="1.0" encoding="UTF-8"?>
<config> </config>
"""
        filename = _create_xml(xml)
        xml_root = config.parse_config(filename)
        clients = config.parse_clients(xml_root)
        self.assertEqual([], clients)
Ejemplo n.º 4
0
    def test_invalid_alert_attributes(self):
        xml = """<?xml version="1.0" encoding="UTF-8"?>
<config>
    <client
        ip='localhost'
        username='******'
        password='******'
        mail='*****@*****.**'
        platform='Linux'>
            <alert t="memory" limit="80%" />
    </client>
</config>
"""
        filename = _create_xml(xml)
        xml_root = config.parse_config(filename)
        with self.assertRaisesRegex(
                RuntimeError,
                'Invalid type or limit attributes for .*<alert.*'):
            config.parse_clients(xml_root)
Ejemplo n.º 5
0
    def test_valid_without_alerts(self):
        xml = """<?xml version="1.0" encoding="UTF-8"?>
<config>
    <client
        ip='localhost'
        username='******'
        password='******'
        mail='*****@*****.**'
        platform='Linux' />
</config>
"""
        filename = _create_xml(xml)
        xml_root = config.parse_config(filename)
        clients = config.parse_clients(xml_root)
        self.assertEqual(1, len(clients))
        self.assertEqual('localhost', clients[0]['ip'])
        # port defaults to 22
        self.assertEqual(22, clients[0]['port'])
        self.assertEqual('atodorov', clients[0]['username'])
        self.assertEqual('example', clients[0]['password'])
        self.assertEqual('*****@*****.**', clients[0]['mail'])
        self.assertEqual({}, clients[0]['alerts'])
Ejemplo n.º 6
0
    response = _out.read().strip().decode('utf8')

    ssh.close()

    return json.loads(response)


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print('USAGE: server.py path/to/config.xml')
        sys.exit(1)

    # parse the XML configuration
    config_xml = config.parse_config(sys.argv[1])
    clients = config.parse_clients(config_xml)
    smtp_cfg = config.parse_smtp(config_xml)

    # connect to the DB
    db = orm.connect(config.parse_db(config_xml))

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    for client in clients:
        system = db.query(orm.System).filter_by(name=client['ip']).first()
        if not system:
            system = orm.System(name=client['ip'])
            db.add(system)
            db.commit()