|  | 
|  | 1 | + | 
|  | 2 | +import sqlite3 | 
|  | 3 | +from sqlite3 import Error | 
|  | 4 | + | 
|  | 5 | + | 
|  | 6 | +class Node: | 
|  | 7 | + | 
|  | 8 | +    def __init__(self, node_id, site_id='', management_ip='', console_id='', vendor_id='', platform_id='', os_id=''): | 
|  | 9 | +        self.node_id = node_id | 
|  | 10 | +        self.site_id = site_id | 
|  | 11 | +        self.management_ip = management_ip | 
|  | 12 | +        self.console_id = console_id | 
|  | 13 | +        self.vendor_id = vendor_id | 
|  | 14 | +        self.platform_id = platform_id | 
|  | 15 | +        self.os_id = os_id | 
|  | 16 | + | 
|  | 17 | + | 
|  | 18 | +    @property | 
|  | 19 | +    def description(self): | 
|  | 20 | +        return ("""Node: {} | 
|  | 21 | +Site: {} | 
|  | 22 | +Management IP: {} | 
|  | 23 | +Console: {} | 
|  | 24 | +Vendor: {} | 
|  | 25 | +Platform: {} | 
|  | 26 | +SW Version: {}""".format(self.node_id, self.site_id, self.management_ip, | 
|  | 27 | +                      self.console_id, self.vendor_id, self.platform_id, | 
|  | 28 | +                      self.os_id)) | 
|  | 29 | + | 
|  | 30 | + | 
|  | 31 | +class NodeStorage: | 
|  | 32 | +    """ | 
|  | 33 | +    To test in database in memory use ':memory:' | 
|  | 34 | +    To use database use 'test.db' | 
|  | 35 | +
 | 
|  | 36 | +    """ | 
|  | 37 | + | 
|  | 38 | +    def __init__(self, database='test.db'):  | 
|  | 39 | +        self.db = database | 
|  | 40 | +        self.conn = sqlite3.connect(self.db) | 
|  | 41 | +        self.create_table() | 
|  | 42 | + | 
|  | 43 | + | 
|  | 44 | +    def create_connection(self): | 
|  | 45 | +        try: | 
|  | 46 | +            conn = sqlite3.connect(self.db) | 
|  | 47 | +            return conn | 
|  | 48 | +        except Error as e: | 
|  | 49 | +            print(e) | 
|  | 50 | + | 
|  | 51 | +        return None | 
|  | 52 | + | 
|  | 53 | + | 
|  | 54 | +    def create_table(self): | 
|  | 55 | +        with self.conn: | 
|  | 56 | +            # import pdb;pdb.set_trace() | 
|  | 57 | +            c = self.conn.cursor() | 
|  | 58 | +            c.execute(""" CREATE TABLE IF NOT EXISTS node_db ( | 
|  | 59 | +                            node_id text,  | 
|  | 60 | +                            site_id text,  | 
|  | 61 | +                            management_ip text,  | 
|  | 62 | +                            console_id text,  | 
|  | 63 | +                            vendor_id text,  | 
|  | 64 | +                            platform_id text,  | 
|  | 65 | +                            os_id text | 
|  | 66 | +                            );""") | 
|  | 67 | + | 
|  | 68 | + | 
|  | 69 | +    def add_node(self, node_info): | 
|  | 70 | +        """ | 
|  | 71 | +        node_info is an object of Node() class | 
|  | 72 | +
 | 
|  | 73 | +        """ | 
|  | 74 | +        # node_info = Node(node_id, site_id, management_ip, console_id, vendor_id, platform_id, os_id) | 
|  | 75 | +        # print(node_info.description()) | 
|  | 76 | +        with self.conn: | 
|  | 77 | +            c = self.conn.cursor() | 
|  | 78 | +            c.execute("INSERT INTO node_db VALUES (:node_id, :site_id, :management_ip, :console_id," | 
|  | 79 | +                      " :vendor_id, :platform_id, :os_id)", | 
|  | 80 | +                      {'node_id': node_info.node_id, 'site_id': node_info.site_id, 'management_ip': node_info.management_ip, | 
|  | 81 | +                       'console_id': node_info.console_id, 'vendor_id': node_info.vendor_id, 'platform_id': node_info.platform_id, | 
|  | 82 | +                       'os_id': node_info.os_id}) | 
|  | 83 | + | 
|  | 84 | + | 
|  | 85 | +    def remove_node(self, node_id): | 
|  | 86 | +        with self.conn: | 
|  | 87 | +            c = self.conn.cursor() | 
|  | 88 | +            c.execute("DELETE FROM node_db WHERE node_id = :node_id", {'node_id': node_id}) | 
|  | 89 | +            return node_id | 
|  | 90 | + | 
|  | 91 | + | 
|  | 92 | +    def find_node(self, node_id): | 
|  | 93 | +        with self.conn: | 
|  | 94 | +            c = self.conn.cursor() | 
|  | 95 | +            c.execute("SELECT * FROM node_db WHERE node_id = :node_id", {'node_id': node_id}) | 
|  | 96 | +            node = c.fetchone() | 
|  | 97 | + | 
|  | 98 | +        if node: | 
|  | 99 | +            return Node(*node) | 
|  | 100 | +        else: | 
|  | 101 | +            return None | 
|  | 102 | + | 
|  | 103 | + | 
|  | 104 | +    def generate_report(self): | 
|  | 105 | +        with self.conn: | 
|  | 106 | +            c = self.conn.cursor() | 
|  | 107 | +            c.execute("SELECT * FROM node_db") | 
|  | 108 | +            all_devices = c.fetchall() | 
|  | 109 | + | 
|  | 110 | +            print("\n\n" | 
|  | 111 | +                  "--------------------------------------------------------------------\n" | 
|  | 112 | +                  "Node name | Site | Management Ip | Vendor  | Platform | OS version \n" | 
|  | 113 | +                  "--------------------------------------------------------------------") | 
|  | 114 | +            for node in all_devices: | 
|  | 115 | +                # print(donor) | 
|  | 116 | +                node_id = node[0] | 
|  | 117 | +                site_id = node[1] | 
|  | 118 | +                management_ip = node[2] | 
|  | 119 | +                vendor_id = node[3] | 
|  | 120 | +                platform_id = node[4] | 
|  | 121 | +                os_id = node[5] | 
|  | 122 | + | 
|  | 123 | +                print("{:12}{:7}{:16}{:10}{:11}{:11}".format(node_id, site_id, management_ip, vendor_id, platform_id, os_id)) | 
|  | 124 | +             | 
|  | 125 | +            print("--------------------------------------------------------------------\n") | 
|  | 126 | +            print("Total Devices: {}".format(len(all_devices))) | 
|  | 127 | +            print("\n\n\n\n") | 
|  | 128 | + | 
|  | 129 | + | 
|  | 130 | + | 
|  | 131 | + | 
0 commit comments