Static Routing

This is a continuation of the previous how to located here.  You can download this Packet Tracer file from here.

In this how to, we have configured router 0 to allow communication between networks 10.0.0.0 and 192.168.50.100

You do this by running the following command on Router 0

ip route 10.0.0.0 255.0.0.0  10.0.0.0

 

Static_routing

Share Button

PVST – Per VLAN Spanning Tree Protocol

This how to shows how to setup PVST (Per VLAN Spanning Tree Protocol) for the VLANs created. Keep in mind the model I created here is not robust enough to support full redundancy for all VLANs but it will do just fine to show how PVSTs can be setup. This particular Packet Tracer file can be downloaded from here

In few words, assuming we have VLANs 50,60,99 and 150, PVST determines which switch will be the Root Primary Switch for VLAN50 and which Switch will be the Root Secondary for VLAN50. The same goes for the rest of the VLANs.

We are using the setup from the previous posts.
VLAN-SWITCH-REDUNANCY

On Switch 3 run the following commands.

spanning-tree mode  pvst 
spanning-tree vlan 50 priority 0
spanning-tree vlan 60 priority 0
spanning-tree vlan 80 priority 0
spanning-tree vlan 99 priority 0
spanning-tree vlan 150 priority 0

On Switch 4 run the following commands.

spanning-tree mode  pvst 
spanning-tree vlan 50 root secondary
spanning-tree vlan 60 root secondary
spanning-tree vlan 80 root secondary
spanning-tree vlan 99 root secondary
spanning-tree vlan 150 root secondary

On Switch 2 we can run few commands to increase performance by enabling instant forwarding and by also enabling bpdu-guard. These commands should be run only on switches that hosts are connected.

#On the switch that the hosts are connected. It will enable fast forwarding.
spanning-tree portfast
#On the switch that the hosts are connected. It will enable bpguard
spanning-tree BPDUguard
Share Button

Create a Redundant Switch environment.

This how to is a further expansion of the previous how to located . In this how to switch redundancy is introduced for all VLANs. You can download the setup for this Packet Tracer from here

VLAN-SWITCH-REDUNANCY

 

 

 

 

Going by the image, there are three new switches introduced, SWITCH2, SWITCH3 and SWITCH4. Switches 3 and 4 connect to Switch2 which handles the traffic for those particular hosts. Also, Switches 3 and 4 connect to Switch 0, making possible the communication with the VLANS and the hosts being handled by Switch1.

The following commands will need to be run on SWITCH 2 – 3 – 4.

#Create and Name the VLANs
On Switch 2
vlan 50
name students
vlan 60
name teachers
vlan 99
name mgt
vlan 80
name native

#Change the Default VLAN from 1 to 80
interface fastEthernet 0/1
switchport truck native vlan 80

#Assign ports 5 to 15 on VLAN 50
interface range fastEthernet 0/5-15
switchport mode access
switchport access vlan 50

#Assign ports 21 to 23 to VLAN 60
interface range fastEthernet 0/21-23
switchport mode access
switchport access vlan 60

#Assign port 24 to VLAN 99
interface fastEthernet 0/24
switchport mode access
switchport access vlan 99

 

The following commands will need to be run on Switch 3

interface fastEthernet 0/1
switchport mode trunk
switchport trunk allowerd vlan 1-99,150

interface fastEthernet 0/2
switchport mode trunk
switchport trunk allowerd vlan 1-99,150

 

The following commands will need to be run on Switch 4

interface fastEthernet 0/1
switchport mode trunk
switchport trunk allowerd vlan 1-99,150

interface fastEthernet 0/2
switchport mode trunk
switchport trunk allowerd vlan 1-99,150
Share Button

Configure DHCP on Router and handle VoIP phones

This how to is a continuation of  the previous here . The VoIP configured PacketTracer file can be downloaded from here.

VLAN4

In this how to the router will be configured to also act as a DHCP server. Also the VLAN 150 will converted to be able to handle telephony. Also some minor changes will be done on the switch it self in order for it to handle telephony data. Next on some of the commands below are comments to explain what each command does.

Configure DHCP on the router.

 
configure  terminal 
name of your IP Pool
network 192.168.150.0 255.255.255.0
default-router  192.168.15.1
option 150 ip 192.168.150.1  #set raw DHCP options. the 150 is for telephony.
end

Configure the router to understand Telephony data

 
telephony-service
max-dn 10 #Maximum directory numbers
max-ephones 10 #Maximum phones to support
ip source-address 192.168.150.1 port 2000  #The network IP and the default port used.
auto assign 1 to 9 #Automatically assigns ext number to buttons
end

On the switch Re-configure VLAN-150 from Access port to Voice port and assign port 20 to a phone

 
interface FastEthernet 0/20
switchport mode access
no switchport access vlan 150
switchport voice vlan 150 

Configure the router to assign a dial number to the phone

 
ephone-dn 1 #Configure phone number 1, 2....n etc 
number 62001 #give this extension number to the phone
Share Button

Configure Router to handle traffic from VLANs.

This how to is a continuation of  the previous howto . You can download the PacketTracer file from here.

In this how to a router will be configured to handle traffic from all VLANs. The router will handle traffic from all networks created by the VLANs. Each host on each VLAN will be then be able to ping the router’s IP address. The router’s IP address for hosts on different VLANs will belong to the network the VLAN operates in. In other words a host in the VLAN 50 will have as default gateway 192.168.50.100 and so forth with the rest of the hosts on the different VLANs.

VLAN4

 

Create Trunk between Switch 1 and Router 1. Run the following commands on Switch 1

 
interface fastEthernet 0/2
switchport mode trunk
switchport trunk allowed vlan 1-99,150

Configure the router.

For VLAN 50

 
interface fastEthernet 0/0.50
encapsulation dot1Q 50
ip address 192.168.50.100 255.255.255.0

For VLAN 60

 
interface fastEthernet 0/0.60
encapsulation dot1Q 60
ip address 192.168.60.100 255.255.255.0

For VLAN 99

 
interface fastEthernet 0/0.99
encapsulation dot1Q 99
ip address 192.168.99.100 255.255.255.0

For VLAN 150

 
interface fastEthernet 0/0.150
encapsulation dot1Q 150
ip address 192.168.150.100 255.255.255.0
Share Button

Create VLANS – Trunking, Two Switch Configuration, Change native VLAN

In this how to, two switches are configured to communicate with VLANs. For not ignore the router. Each Switch is configured with the same VLANs, otherwise they will not know how to exist.. In addition, we are going to create a Trunk for both switches to communicate all VLANs between them. Download the PacketTracer file

VLAN4

Configure both switches to have the same VLANs. The process and VLAN creation will be exactly the same as with the  the commands found on the previous how to. However, on this switch we will add an additional VLAN for VoIP.  Below are the commands.

Create the VLANs, 50(students), 60(teachers), 99(mgt), 150(voice)

 
enable
configure terminal
vlan 50
name students
vlan 60
name teachers
vlan 99
name mgt
vlan 150
name voice

Assign ports to each VLAN
For VLAN students (ports 5 to 20 on interface 0)

interface range fastEthernet 0/5-15
switchport mode access
switchport access vlan 50

For VLAN teachers (ports 21 to 23 on interface 0)

interface range fastEthernet 0/21-23
switchport mode access
switchport access vlan 60

For VLAN mgt (ports 24 on interface 0) and also assign IP address in order to communicate with the switch

interface fastEthernet 0/24
switchport mode access
switchport access vlan 99
interface vlan 99
ip address 192.168.99.2 255.255.255.0
no shutdown

For VLAN voice (ports 24 on interface 0)

interface range fastEthernet 0/16-20
switchport mode access
switchport access vlan 150

Create the Trunk.

On a switch ports 1 to 4 belong to VLAN1, which is a factory default. We take port 1 on both switches in order to create the Trunk as mentioned above. Here are the commands to create the trunk; execute these on both switches.  Below the listed VLANs will be handled by the trank. We include the 150 VLAN as well in the last command.

interface fastEthernet 0/1
switchport mode trunk
switchport trunk allowerd vlan 1-99,150

Change native VLAN

The default setting for native VLAN is VLAN 1. However we can change this to be on a different VLAN. We can do this by simply issuing the following command. This will have to be executed on both connected switches.

vlan 80
name native
interface fastEthernet 0/1
switchport trunk native vlan 80
Share Button

Create VLANS – One Switch Configuration

A VLAN is a seperate LAN. It can be created on the switch. Each switch has a default VLAN which is VLAN1. Hosts can be on the same subnet or not. Best practices dictate they should be on different subnets. Below are the commands to create two VLANS. The Student VLAN and the Management VLAN.VLAN

Create the VLANs, 50(students), 60(teachers), 99(mgt), 150(voice)

 
enable
configure terminal
vlan 50
name students
vlan 60
name teachers
vlan 99
name mgt

Assign ports to each VLAN
For VLAN students (ports 5 to 20 on interface 0)

interface range fastEthernet 0/5-15
switchport mode access
switchport access vlan 50

For VLAN teachers (ports 21 to 23 on interface 0)

interface range fastEthernet 0/20-23
switchport mode access
switchport access vlan 60

For VLAN mgt (ports 24 on interface 0) and also assign IP address in order to communicate with the switch

interface fastEthernet 0/24
switchport mode access
switchport access vlan 99
interface vlan 99
ip address 192.168.99.2 255.255.255.0
no shutdown
Share Button

Static Routes between two routers.

The instructions below show how to connect two networks with static routes. Download the PacketTracer file

  • Router1 belongs to network 192.168.0.0 – 255.255.254.0
  • Router2 belongs to network 192.168.2.1 – 255.255.255.192
  • Both routers will communicate with each other via network 10.0.0.0-255.255.255.192

static_routes1

Router1
Setup Network Interface for 192.168.0.0 network

show ip interface brief
enable
configure terminal
no ip domain lookup
no logging console
hostname router1
interface GigabitEthernet0/0
ip address 192.168.0.0 255.255.254.0
duplex full
no shutdown
copy running-config startup-config

Setup Network Interface for 10.0.0.0 network

interface Serial0/0/0
ip address 10.0.0.1 255.255.255.192
no shutdown
ip route 192.168.2.0 255.255.255.192 10.0.0.2
copy running-config startup-config

Router2
Setup Network Interface for 192.168.2.0 network

show ip interface brief
enable
configure terminal
no ip domain lookup
no logging console
hostname router2
interface GigabitEthernet0/0
ip address 192.168.2.0 255.255.255.192
duplex full
no shutdown
copy running-config startup-config

Setup Network Interface for 10.0.0.0 network

interface Serial0/0/0
ip address 10.0.0.2 255.255.255.192
no shutdown
ip route 192.168.0.0 255.255.254.0 10.0.0.1
copy running-config startup-config
Share Button

Python /PostgresqSQL 9.4 – Server Performance Data Capture V.1

These scripts gather static and dynamic information from servers and insert that data into a PostgresSQL database. The static information is information that unless a major upgrade takes place it never changes. They Dynamic data is performance data of the servers. The purpose of the static data is to be able to query for dynamic information which being inserted to the database every X amount of minutes via cron.

These scripts work only on Linux/Unix based machines.

The static information for the remote servers are as follows :

  • Hostname
  • IP
  • Operating System
  • Operating System Version
  • Total Amount of RAM
  • Total Amount of HD space
  • CPU Type
  • MAC ADDRESS

The dynamic information for the remote servers are as follows :

  • Memory Usage
  • Storage Usage
  • Swap Usage
  • Time the data was captured

The static.py script will need to be run only one time on the remote servers or when a major upgrade occurs that might change configuration regarding RAM, Partitions, IP, Operating System (even an upgrade), CPU, NIC replacement.

The dynamic.py script will be run on the remote servers via cron. It is the script that captures information which is being constantly changed, like memory, storage, swap usage. All this data is sent for insertion to the remote database. The script executes it self via cron and then sent to be inserted into a PostgreSQL database.

In both scripts data is entered into a dictionary and then a connection to the database is created in order to insert the data.

The install.py script is not required to be run but it does several things:

  • Installs the PostgresSQL 9.4 database.
  • Creates the database and the role assigned to the database.
  • Creates the Tables needed
  • Configures the postgres.conf file to listen to a specific IP address and port.

However, if you wish to manually setup the database, the SQL script is provided at the bottom of this page. The script is called server_perf.sql

The static.py Script.

#!/usr/bin/python
import psutil
import os
import math
import platform
import subprocess
import socket
import psycopg2
import netifaces as ni

from decimal import *

#Used by the convert values function. It is needed to provide human readable data for the RAM amount produced.
factor = 1024

def Host_name():
    #Get the hostname
    hostname = socket.gethostname()
    return hostname

def IP_address():
    #Get the IP for ETH0
    ni.ifaddresses('eth0')
    ip = ni.ifaddresses('eth0')[2][0]['addr']
    return ip

def OS_make():
    #CPU INFORMATION. Provides the OS make (Windows, Ubunty, RH, Centos, etc)
    #cpu_version = platform.dist()[0]+" "+platform.dist()[1]
    cpu_version = platform.dist()[0]
    return  cpu_version

def OS_Version():
    #Provides the version of the OS.
    os_version = platform.dist()[1]
    return os_version

def Virtual_memory_total():
    #Provides total amount of RAM
    cvr_info = psutil.virtual_memory().total
    return round(cvr_info, 2)

def convert_values():
    #Converts the KB to GB and presents it as such.
    cvr_info = Virtual_memory_total()
    i = int(math.log(cvr_info)/math.log(factor))
    result = float(cvr_info)/factor**i
    return result

def get_processor_info():
    #Gets the verbose info about the CPU (AMD FX(tm)-6350)
    if platform.system() == "Windows":
        return platform.processor()
    elif platform.system() == "Darwin":
        return subprocess.check_output(['/usr/sbin/sysctl', "-n", "machdep.cpu.brand_string"]).strip()
    elif platform.system() == "Linux":
        command = "cat /proc/cpuinfo | grep 'model name' | head -1 | awk -F: '{print $2}'"
        return subprocess.check_output(command, shell=True).strip()
    return ""

#Adjusting precision and then appending to list information taken from Virtual_memory_total function
mem_frmt =   "{0:.2f}".format(convert_values())

#Create the Database PostgreSQL 9.4 connection.
conn = psycopg2.connect("host='10.0.0.41' dbname='serverinfo' user='gmastrokostas'")
cur = conn.cursor() #Create the cursor
#Create a Dictionary to pass the value of each function.
server_info = {'hostname': Host_name(), 'IP': IP_address(), 'OS':OS_make(), 'OS_V':OS_Version(), 'RAM':mem_frmt, 'CPU':get_processor_info()}
cur.execute("INSERT INTO servers(hostname, IP, OS, OS_Version, RAM, CPU) VALUES('%s','%s','%s','%s','%s','%s')" % (Host_name(),IP_address(), OS_make(), OS_Version(), mem_frmt, get_processor_info() ))

#If this is not present the changes will not get commited.
conn.commit()

The Dynamic.py script

import psutil
import os
import math
import platform
import subprocess
import socket
import psycopg2
import netifaces as ni
 
def Host_name():
    #Get the hostname
    hostname = socket.gethostname()
    return hostname
 
def IP_address():
    #Get the IP for ETH0
    ni.ifaddresses('eth0')
    ip = ni.ifaddresses('eth0')[2][0]['addr']
    return ip
 
factor = 1024
def Virtual_memory_use():
    #Provides total amount of RAM
    cvr_info = psutil.virtual_memory().used
    #cvr_info_ram = Virtual_memory_use()
    i = int(math.log(cvr_info)/math.log(factor))
    result_ram = float(cvr_info)/factor**i
    return round(result_ram)
memory_used_frmt =   "{0:.2f}".format(Virtual_memory_use())
 
def Partition_root_Usedspace():
    #Provides total amount of RAM
    cvr_info = psutil.disk_usage('/').used
    #cvr_info_ram = Virtual_memory_use()
    i = int(math.log(cvr_info)/math.log(factor))
    result_ram = float(cvr_info)/factor**i
    return round(result_ram)
hd_used_frmt =   "{0:.2f}".format(Partition_root_Usedspace())
 
 
def CPU_general_usage():
    #CPU INFORMATION.
    cpu_prec_usage = psutil.cpu_percent(interval=0)
    return cpu_prec_usage
 
def Swap_memory_usage():
    #SWAP SIZE USAGE
    swap_mem_full_num = psutil.swap_memory().used
    return swap_mem_full_num
 
 
conn = psycopg2.connect("host='10.0.0.41' dbname='serverinfo' user='gmastrokostas'")
cur = conn.cursor() #Create the cursor
#Create a Dictionary to pass the value of each function.
server_info = {'hostname': Host_name(), 'IP': IP_address(),'MEM_USE':memory_used_frmt, 'HD_USE':hd_used_frmt, 'CPU_USE':CPU_general_usage(), 'SWP_USE':Swap_memory_usage()}
cur.execute("INSERT INTO SERVER_PERF(hostname, IP, MEM_USE, HD_USE, CPU_USE, SWP_USE) VALUES('%s','%s','%s','%s','%s','%s')" % (Host_name(),IP_address(), memory_used_frmt, hd_used_frmt, CPU_general_usage(), Swap_memory_usage()  ))
 
#If this is not present the changes will not get commited.
conn.commit()

The Install.py Script.

#!/usr/bin/python
import subprocess
import os
import pwd
import grp
from pwd import getpwnam
import psycopg2
import re
import time

def install_PostgresSQL():
#This function checks if the Postgres RPM package is installed or not.
#If not it will then download the RPM package and then installs the packages nde     d
#for the postgresSQL database.
    try:

        if subprocess.call(["rpm", "-q", "pgdg-centos94"]) == 0:
            print "POSTGRES-SQL IS ALREADY INSTALLED"

        elif subprocess.call(["rpm", "-q", "pgdg-centos94"]) == 1:
            subprocess.call(["yum", "localinstall", "-y", "http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm"])
            subprocess.call(["yum", "install", "-y", "postgresql94-contrib", "postgresql94-server"])
            print "#################################################################"
            post_install_PostgreSQL_create_postgres_Directories()

    except Exception as e:

        print e
        print "Install of RPM Packages failed. Exiting with Error at function Install_PostgresSQL"
        exit(0)

def post_install_PostgreSQL_create_postgres_Directories():
#This function will create the directories from where the database will run fr.
#It will also adjust the permissions of these directories so they will be owneby      user postgres.
#It will also initialize the database to the directory created and also start e      database.
    try:
        #Setup directories and set permissions
        parent_dir = '/home/postgres'
        directory = '/home/postgres/postgres94'
        postgres_user = pwd.getpwnam('postgres')[2]
        postgres_group = grp.getgrnam('postgres')[2]

        #Check if the postgres home directory exists. If it doesn't create it. If it does then exit.
        if not os.path.exists(directory):
            os.makedirs(directory)
            os.chown(parent_dir, postgres_user, postgres_group)
        else:
            exit(0)
        #Change Recursively all permissions of the /home/postgres directory to be owned by user postgres
        for dirpath, dirname, filenames in os.walk(parent_dir):

            for loop_dir in dirname:
                path = os.path.join(dirpath, loop_dir)
                os.chown(path, postgres_user, postgres_user )

        post_install_PostgreSQL_start_database()

    except Exception as e:

        print e
        print "Error in Post Install steps. Exiting with Error at function post_install_PostgreSQL_create_postgres_Directories "

def post_install_PostgreSQL_start_database():
    try:
        os.system("su postgres -c '/usr/pgsql-9.4/bin/initdb -D /home/postgres/postgres94'")
        #os.system("su postgres -c '/usr/pgsql-9.4/bin/pg_ctl -D /home/postgres/postgres94 -l /home/postgres/postgres94/logfile start'")
        print "INITDB DATABASE"
        post_install_PostgreSQL_configure_postgres_files()

    except  Exception as e:
        print e
        print "Exiting with error at function post_install_PostgreSQL_start_database"

def post_install_PostgreSQL_configure_postgres_files():

    try:
        ##Configure the listening address and the port on the postgres.conf file
        text_ip = "#listen_addresses = 'localhost'"
        subtext_ip = "listen_addresses = '10.0.0.27'"
        text_port = "#port = 5432"
        subtext_port = "port = 5432"

        s = open("/home/postgres/postgres94/postgresql.conf").read()
        s = s.replace(text_ip, subtext_ip)
        s = s.replace(text_port, subtext_port)
        f = open("/home/postgres/postgres94/postgresql.conf", 'w')
        f.write(s)
        f.close()


        s = open("/home/postgres/postgres94/postgresql.conf").read()
        s = s.replace(text_port, subtext_port)
        f = open("/home/postgres/postgres94/postgresql.conf", 'w')
        f.write(s)
        f.close()
        ###########END#########################

        #Edit the pg_hba.conf file to setup from whom the server will accept connections from
        list = ["host    all             all             10.0.0.0/26             trust", "host    all             all             127.0.0.1/32            trust"]

        f = open('/home/postgres/postgres94/pg_hba.conf', "a")
        for items in list:

            f.write(items+'\n')
            f.close
        #########END#########################

        time.sleep(30)

    except Exception as e:
        print e
        print "Exiting with error at function post_install_PostgreSQL_configure_postgres_files"



def create_Database():

    try:
        os.system("su postgres -c '/usr/pgsql-9.4/bin/pg_ctl -m fast -D /home/postgres/postgres94  -l /home/postgres/postgres94/logfile start'")
        print "STARTING DATABASE FOR THE FIRST TIME"
        time.sleep(60)
        conn = psycopg2.connect("host='10.0.0.27' dbname='postgres' user='postgres'")
        cur = conn.cursor() #Create the cursor
        conn.autocommit = True
        cur.execute("""CREATE DATABASE SERVERS""")
        cur.execute("""CREATE ROLE serverseek WITH PASSWORD 'Password!'""")
        cur.execute("""ALTER DATABASE SERVERS OWNER TO SERVERSEEK""")
        cur.execute("""ALTER ROLE SERVERSEEK WITH LOGIN""")
        cur.execute("""GRANT ALL PRIVILEGES ON DATABASE SERVERS to serverseek""")
        conn.commit()
        conn.close()

        conn = psycopg2.connect("host='10.0.0.27' dbname='servers' user='serverseek'")
        cur = conn.cursor() #Create the cursor
        cur.execute("CREATE TABLE SERVERS( HOSTNAME        TEXT NOT NULL, IP              INET NOT NULL, OS              TEXT, OS_VERSION              TEXT, RAM             NUMERIC(10,2), HD_TOTAL_SPACE  NUMERIC(10,2), CPU             TEXT, MAC             MACADDR, TIME_CAPTURED   TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CONSTRAINT PK_HOSTNAME PRIMARY KEY (HOSTNAME));")
        cur.execute("CREATE TABLE SERVER_PERF( HOSTNAME        TEXT NOT NULL REFERENCES SERVERS (HOSTNAME), IP              INET NOT NULL, MEM_USE         NUMERIC(10,2), HD_USE          NUMERIC(10,2), CPU_USE         NUMERIC(10,2), SWP_USE         NUMERIC(10,2), TIME_CAPTURED   TIMESTAMP DEFAULT CURRENT_TIMESTAMP);")
        #If this is not present the changes will not get commited.
        conn.commit()
        conn.close()
        #for row in cur: #Enable the following two lines to view query results
        #    print rows
    except Exception as e:
        print e
        print "Exiting with error at function create_Database"

########################
install_PostgresSQL()
########################
create_Database()

The server_perf.sql script, is the SQL script needed to create the role, database, tables in the postgresSQL database. IMPORTANT If you run the install.py script you do not need to run this SQL script. The install.py does this for you.

#Following SQL script creates role-database and adjusts ownership of the new database.
#As user Postgres Run the following
CREATE DATABASE SERVERS;
CREATE ROLE serverseek WITH PASSWORD 'YourPassword';
ALTER DATABASE SERVERS OWNER TO SERVERSEEK;
ALTER ROLE SERVERSEEK WITH LOGIN;
GRANT ALL PRIVILEGES ON DATABASE SERVERS to SERVERSEEK;

#Following SQL script creates the table needed for the script to insert the data it captures.
#As user  SERVERSEEK run the following.
CREATE TABLE SERVERS
(
HOSTNAME        TEXT NOT NULL,
IP              INET NOT NULL,
OS              TEXT,
OS_VERSION              TEXT,
RAM             NUMERIC(10,2),
HD_TOTAL_SPACE  NUMERIC(10,2),
CPU             TEXT,
MAC             MACADDR,
TIME_CAPTURED   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT PK_HOSTNAME PRIMARY KEY (HOSTNAME)
);
ALTER TABLE SERVERS
        OWNER TO SERVERSEEK;

CREATE TABLE SERVER_PERF
(
HOSTNAME        TEXT NOT NULL REFERENCES SERVERS (HOSTNAME),
IP              INET NOT NULL,
MEM_USE         NUMERIC(10,2),
HD_USE          NUMERIC(10,2),
CPU_USE         NUMERIC(10,2),
SWP_USE         NUMERIC(10,2),
TIME_CAPTURED   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE SERVER_PERF
        OWNER TO SERVERSEEK;



——————————————————————————————————
MODIFIED VERSIONS OF STATIC AND DYNAMIC PYTHON SCRIPTS. MEANT TO BE DEPLOYED ON VERSION 2 OF THE OVERALL PACKAGE
——————————————————————————————————
STATIC.PY


#!/usr/bin/python
import psutil
import os
import math
import platform
import subprocess
import socket
#import psycopg2
import netifaces as ni
import humanize
from cpuinfo import cpuinfo


class Static():
    def __init__(self):
        #NIC INFO
        self.hostname   = socket.gethostname()
        self.iface      = ni.interfaces()[1]
        self.ipaddress  = ni.ifaddresses(self.iface)[2][0]['addr']
        #---OS INFO
        self.osinfo_1   = platform.dist()

        self.osinfo_2_os    = platform.uname()[0]
        self.osinfo_2_ver   = platform.uname()[1]
        self.osinfo_2_rel   = platform.uname()[2]
        #----RAM INFO
        raw_totalM = psutil.virtual_memory().total
        self.total_M    = humanize.naturalsize(raw_totalM)
        #----CPU INFO
        self.info       = cpuinfo.get_cpu_info()
        self.brand      = self.info['brand']
        self.Mhz        = self.info['count']
        self.arch       = self.info['bits']

    def get_OS_make(self):
       if platform.system()     =="Windows":
           return self.osinfo_2_os, self.osinfo_2_ver, self.osinfo_2_rel
       elif platform.system()  =="Linux":
           return self.osinfo_1

host = Static()
'''
print host.hostname
print host.iface
print host.ipaddress
print host.osinfo_1
print host.osinfo_2_os
print host.osinfo_2_ver
print host.osinfo_2_rel
print host.total_M
print host.brand
print host.Mhz
print host.arch
'''
print host.get_OS_make()

DYNAMIC.PY

#THIS FILE IS MANAGED BY PUPPET
#!/usr/bin/python
import psutil
import os
import math
import platform
import subprocess
import socket
#import psycopg2
import netifaces as ni
import humanize
from cpuinfo import cpuinfo

class Dynamic():
    def __init__(self):
        #NIC INFO
        self.hostname   = socket.gethostname()
        self.iface      = ni.interfaces()[1]
        self.ipaddress  = ni.ifaddresses(self.iface)[2][0]['addr']
        #RAM USAGE INFO
        self.total_ram_raw       = humanize.naturalsize(psutil.virtual_memory().total)
        self.used_ram_raw        = humanize.naturalsize(psutil.virtual_memory().used)
        self.used_ram_perc       = psutil.virtual_memory().percent
        #HD USAGE INFO
        self.total_HD_raw        = humanize.naturalsize(psutil.disk_usage('/').total)
        self.used_HD_raw         = humanize.naturalsize(psutil.disk_usage('/').used)
        self.used_HD_perc        = psutil.disk_usage('/').percent
        #CPU USAGE INFO
        self.cpu_use_perc        = psutil.cpu_percent()
        #SWAP USAGE INFO
        self.swap_used           = humanize.naturalsize(psutil.swap_memory().used)
        self.swap_perc           = psutil.swap_memory()[3]
        self.swap_total          = humanize.naturalsize(psutil.swap_memory().total)
    def export_to_csv(self):
        print self.hostname


info = Dynamic()

Share Button

Python – ElementTree XML parser

Displays all elements and subelemts of an XML file

#!/usr/bin/python
from xml.etree import ElementTree

with open ('/home/gmastrokostas/PycharmProjects/learning/Linux_int.xml', 'rt') as file:
    tree = ElementTree.parse(file)

for node_1 in tree.iter():
    print node_1.tag, node_1.attrib
Share Button