Skip to content
Snippets Groups Projects
__main__.py 3.99 KiB
Newer Older
Jan Müller's avatar
Jan Müller committed
#!/usr/bin/env python3

import connexion

from access_node import encoder
Simon Oehrl's avatar
Simon Oehrl committed
from flask_cors import CORS
Jan Müller's avatar
Jan Müller committed

from access_node.models.nodes import nodes
import time
Jan Müller's avatar
Jan Müller committed
import psycopg2

def ConnectToDatabase():
	return psycopg2.connect(database="postgres", user=postgres_username,
                       password=postgres_password, host="database", port=str(port))
Jan Müller's avatar
Jan Müller committed

Jan Müller's avatar
Jan Müller committed
def SetupNestTables(postgres_username, postgres_password, port):
	con = ConnectToDatabase()
Jan Müller's avatar
Jan Müller committed
	print("Database connection opened successfully!")

	cur = con.cursor()
	cur.execute("DROP TABLE IF EXISTS SIMULATION_NODES CASCADE")
	cur.execute("DROP TABLE IF EXISTS MULTIMETERS CASCADE")
	cur.execute("DROP TABLE IF EXISTS GIDS CASCADE")
	cur.execute("DROP TABLE IF EXISTS MULT_PER_GID CASCADE")


	cur.execute('''CREATE TABLE SIMULATION_NODES (
Jan Müller's avatar
Jan Müller committed
      NODE_ID           INT       PRIMARY KEY NOT NULL UNIQUE,
      ADDRESS           VARCHAR(50),
Jan Müller's avatar
Jan Müller committed
      CURRENT_SIM_TIME  FLOAT);''')

Jan Müller's avatar
Jan Müller committed
      MULTIMETER_ID   INT PRIMARY KEY NOT NULL UNIQUE,
Jan Müller's avatar
Jan Müller committed
      ATTRIBUTE       VARCHAR(50) );''')
Jan Müller's avatar
Jan Müller committed

Jan Müller's avatar
Jan Müller committed
      GID             INT PRIMARY KEY NOT NULL UNIQUE,
      NODE_ID         INT,  
      POPULATION_ID   INT,
      FOREIGN KEY (NODE_ID) REFERENCES SIMULATION_NODES (NODE_ID));''')

Jan Müller's avatar
Jan Müller committed
      GID             INT NOT NULL,
      MULTIMETER_ID   INT NOT NULL,
      PRIMARY KEY (GID,MULTIMETER_ID),
      FOREIGN KEY (GID) REFERENCES GIDS (GID),
      FOREIGN KEY (MULTIMETER_ID) REFERENCES MULTIMETERS (MULTIMETER_ID));''')

	con.commit()
	con.close()
	print("Nest tables created successfully!\n")
Jan Müller's avatar
Jan Müller committed

def SetupArborTables(postgres_username, postgres_password, port):
	con = ConnectToDatabase()
	print("Database connection opened successfully!")
	cur = con.cursor()
	cur.execute("DROP TABLE IF EXISTS PROBES CASCADE")
	cur.execute("DROP TABLE IF EXISTS CELLS CASCADE")
Jan Müller's avatar
Jan Müller committed
	cur.execute("DROP TABLE IF EXISTS ARBOR_SIMULATION_NODES CASCADE")
	cur.execute("DROP TABLE IF EXISTS ATTRIBUTES CASCADE")
Jan Müller's avatar
Jan Müller committed

	cur.execute('''CREATE TABLE ARBOR_SIMULATION_NODES (
      NODE_ID           INT PRIMARY KEY NOT NULL UNIQUE,
      ADDRESS           VARCHAR(50),
      CURRENT_SIM_TIME  FLOAT);''')
Jan Müller's avatar
Jan Müller committed

	cur.execute('''CREATE TABLE CELLS (
      CELL_ID   			INT PRIMARY KEY NOT NULL UNIQUE
			);''')
Jan Müller's avatar
Jan Müller committed

	cur.execute('''CREATE TABLE CELL_PROPERTIES (
      CELL_ID   			INT NOT NULL,
Jan Müller's avatar
Jan Müller committed
			PROPERTY				VARCHAR(50) NOT NULL,
			PRIMARY KEY (CELL_ID, PROPERTY),
			FOREIGN KEY (CELL_ID) REFERENCES CELLS (CELL_ID),
			);''')
Jan Müller's avatar
Jan Müller committed

	cur.execute('''CREATE TABLE ATTRIBUTES (
      ATTRIBUTE_ID		INT PRIMARY KEY NOT NULL UNIQUE,
      NAME   					VARCHAR(50) NOT NULL,
    	);''')

	cur.execute('''CREATE TABLE PROBES (
      PROBE_ID      INT PRIMARY KEY NOT NULL UNIQUE,
Jan Müller's avatar
Jan Müller committed
      CELL_ID       INT NOT NULL,  
      SEGMENT_ID 		INT NOT NULL,
			POSITION   		FLOAT,
			ATTRIBUTE_ID	INT NOT NULL,
			NODE_ID       INT,
Jan Müller's avatar
Jan Müller committed
      FOREIGN KEY (NODE_ID) REFERENCES ARBOR_SIMULATION_NODES (NODE_ID),
			FOREIGN KEY (CELL_ID) REFERENCES CELLS (CELL_ID),
			FOREIGN KEY (ATTRIBUTE_ID) REFERENCES ATTRIBUTES (ATTRIBUTE_ID));''')
Jan Müller's avatar
Jan Müller committed

Jan Müller's avatar
Jan Müller committed

	con.commit()
Jan Müller's avatar
Jan Müller committed
	con.close()
	print("Arbor tables created successfully!\n")
Jan Müller's avatar
Jan Müller committed

def main():
Jan Müller's avatar
Jan Müller committed
	# Connect to the Database and initalize basic Table structure
Jan Müller's avatar
Jan Müller committed
	SetupNestTables('postgres', 'docker', 5432)
	#SetupArborTables('postgres', 'docker', 5432)

	# Wait for simulation nodes to post to database
	time.sleep(10)
Jan Müller's avatar
Jan Müller committed


	# get simulation nodes
	con = ConnectToDatabase()
	cur = con.cursor()
	# NEST
	cur.execute("SELECT ADDRESS FROM SIMULATION_NODES")
	nodes.nest_simulation_nodes = [i[0] for i in cur.fetchall()]
	# Arbor
	#cur.execute("SELECT ADDRESS FROM SIMULATION_NODES")
	#nodes.nest_simulation_nodes = [i[0] for i in cur.fetchall()]
	con.close()

Jan Müller's avatar
Jan Müller committed

	# run acces_node
	app = connexion.App(__name__, specification_dir='./swagger/')
	app.app.json_encoder = encoder.JSONEncoder
	app.add_api('swagger.yaml', arguments={
				'title': 'In-Situ Pipeline REST API'})
	CORS(app.app)
	app.run(port=8080)
Jan Müller's avatar
Jan Müller committed


if __name__ == '__main__':
    main()