icds/gctrl-spring/gctrl/src/main/java/Knowledge.java
2021-01-15 12:17:27 +01:00

402 lines
No EOL
13 KiB
Java

import org.h2.tools.DeleteDbFiles;
import java.sql.*;
import java.util.*;
//
//* @author couedrao on 25/11/2019.
//* @project gctrl
//
//
//* 1)Standard data shared among the monitor analyze plan and Standard data shared among the monitor, analyze, plan and execute functions
//* 2)The shared knowledge includes data such as topology information, historical logs, metrics, symptoms and policies
//* 3)Created by the monitor part while execute part might update the knowledge
//*
class Knowledge {
private static final String DB_DRIVER = "org.h2.Driver";
private static final String DB_CONNECTION = "jdbc:h2:~/test";
private static final String DB_USER = "";
private static final String DB_PASSWORD = "";
static final int moving_wind = 10;
static final int horizon = 3;
static final String gw = "GW_I";
static final double gw_lat_threshold = 70;
/*TODO : edit symptom, rfc, workflow_lists, plan*/
private static final List<String> symptom = Arrays.asList("N/A", "NOK", "OK");
private static final List<String> rfc = Arrays.asList("DoNotDoAnything", "DecreaseLatencyIn" + gw);
private static final List<String> workflow_lists = Arrays.asList("UC1", "UC2/UC3", "UC4/UC5/UC6");
private static final List<String> plan = Arrays.asList("A", "B", "C");
private final Map<String, String> gwinfo = new HashMap<>();
private final List<Map<String, String>> gwsinfo = new ArrayList<>();
private final String olddestip = "10.2.2.1";
private String newdestip;
private String oldgwip;
private String lbip;
private List<String> newgwsip;
private final String importantsrcip = "192.168.0.1";
void start() throws Exception {
// delete the H2 database named 'test' in the user home directory
DeleteDbFiles.execute("~", "test", true);
Main.logger(this.getClass().getSimpleName(), "old database 'test' deleted");
//Initialization of the Knowledge
store_symptoms();
store_rfcs();
store_plans();
store_execution_workflow();
//TODO : update gwinfo ************
gwinfo.put("name", "gwi2");
gwinfo.put("image", "gateway:topo");
gwinfo.put("net", "10.2.2.2/8");
gwsinfo.add(0, gwinfo);
Main.logger(this.getClass().getSimpleName(), "Knowledge Starting");
}
void insert_in_tab(Timestamp timestamp, double lat) {
try (Connection conn = getDBConnection()) {
PreparedStatement insert;
String InsertQuery = "INSERT INTO " + Knowledge.gw + "_LAT" + " (id, latency) values" + "(?,?)";
conn.setAutoCommit(false);
insert = conn.prepareStatement(InsertQuery);
insert.setTimestamp(1, timestamp);
insert.setDouble(2, lat);
insert.executeUpdate();
insert.close();
conn.commit();
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
List<String> get_symptoms() {
String gw_symp = gw + "_SYMP";
Connection conn = getDBConnection();
String SelectQuery = "select * from " + gw_symp;
PreparedStatement select;
List<String> r = null;
try {
select = conn.prepareStatement(SelectQuery);
ResultSet rs = select.executeQuery();
r = new ArrayList<>();
while (rs.next()) {
r.add(rs.getString("symptom"));
}
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
}
return r;
}
List<String> get_rfc() {
String gw_rfc = gw + "_RFC";
Connection conn = getDBConnection();
String SelectQuery = "select * from " + gw_rfc;
PreparedStatement select;
List<String> r = null;
try {
select = conn.prepareStatement(SelectQuery);
ResultSet rs = select.executeQuery();
r = new ArrayList<>();
while (rs.next()) {
r.add(rs.getString("rfc"));
}
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
}
return r;
}
List<String> get_plans() {
String gw_plan = gw + "_PLAN";
Connection conn = getDBConnection();
String SelectQuery = "select * from " + gw_plan;
PreparedStatement select;
List<String> r = null;
try {
select = conn.prepareStatement(SelectQuery);
ResultSet rs = select.executeQuery();
r = new ArrayList<>();
while (rs.next()) {
r.add(rs.getString("plan"));
}
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
}
return r;
}
List<String> get_worklow_lists() {
String gw_execw = gw + "_EXECW";
Connection conn = getDBConnection();
String SelectQuery = "select * from " + gw_execw;
PreparedStatement select;
List<String> r = null;
try {
select = conn.prepareStatement(SelectQuery);
ResultSet rs = select.executeQuery();
r = new ArrayList<>();
while (rs.next()) {
r.add(rs.getString("workflow"));
}
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
}
return r;
}
ResultSet select_from_tab() {
//Main.logger("Select the last " + n + " latencies");
Connection conn = getDBConnection();
String SelectQuery = "select TOP " + moving_wind + " * from " + Knowledge.gw + "_LAT" + " ORDER BY id DESC";
//PreparedStatement select;
ResultSet rs = null;
try {
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
// select = conn.prepareStatement(SelectQuery);
rs = stmt.executeQuery(SelectQuery);
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
void create_lat_tab() {
try (Connection conn = getDBConnection()) {
Statement create;
conn.setAutoCommit(false);
create = conn.createStatement();
create.execute("CREATE TABLE " + Knowledge.gw + "_LAT" + " (id timestamp primary key, latency double )");
create.close();
conn.commit();
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
Main.logger(this.getClass().getSimpleName(), "... Database Created");
}
}
private void store_plans() throws SQLException {
String gw_plan = gw + "_PLAN";
Connection conn = getDBConnection();
Statement create;
conn.setAutoCommit(false);
create = conn.createStatement();
create.execute("CREATE TABLE " + gw_plan + " (id int primary key, plan varchar(20) )");
create.close();
for (int i = 0; i < plan.size(); i++) {
conn = getDBConnection();
PreparedStatement insert;
try {
insert = conn.prepareStatement("INSERT INTO " + gw_plan + " (id, plan) values" + "(?,?)");
insert.setInt(1, i + 1);
insert.setString(2, plan.get(i));
insert.executeUpdate();
insert.close();
conn.commit();
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
}
private void store_rfcs() throws SQLException {
String gw_rfc = gw + "_RFC";
Connection conn = getDBConnection();
Statement create;
conn.setAutoCommit(false);
create = conn.createStatement();
create.execute("CREATE TABLE " + gw_rfc + " (id int primary key, rfc varchar(40) )");
create.close();
for (int i = 0; i < rfc.size(); i++) {
conn = getDBConnection();
PreparedStatement insert;
try {
insert = conn.prepareStatement("INSERT INTO " + gw_rfc + " (id, rfc) values" + "(?,?)");
insert.setInt(1, i + 1);
insert.setString(2, rfc.get(i));
insert.executeUpdate();
insert.close();
conn.commit();
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
}
private void store_execution_workflow() throws SQLException {
String gw_execw = gw + "_EXECW";
Connection conn = getDBConnection();
Statement create;
conn.setAutoCommit(false);
create = conn.createStatement();
create.execute("CREATE TABLE " + gw_execw + " (id int primary key, workflow varchar(50) )");
create.close();
for (int i = 0; i < workflow_lists.size(); i++) {
conn = getDBConnection();
PreparedStatement insert;
try {
insert = conn.prepareStatement("INSERT INTO " + gw_execw + " (id, workflow) values" + "(?,?)");
insert.setInt(1, i + 1);
insert.setString(2, workflow_lists.get(i));
insert.executeUpdate();
insert.close();
conn.commit();
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
}
private void store_symptoms() throws SQLException {
String gw_symp = gw + "_SYMP";
Connection conn = getDBConnection();
Statement create;
conn.setAutoCommit(false);
create = conn.createStatement();
create.execute("CREATE TABLE " + gw_symp + " (id int primary key, symptom varchar(5) )");
create.close();
for (int i = 0; i < symptom.size(); i++) {
conn = getDBConnection();
PreparedStatement insert;
try {
insert = conn.prepareStatement("INSERT INTO " + gw_symp + " (id, symptom) values" + "(?,?)");
insert.setInt(1, i + 1);
insert.setString(2, symptom.get(i));
insert.executeUpdate();
insert.close();
conn.commit();
} catch (SQLException e) {
System.out.println("Exception Message " + e.getLocalizedMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
}
private Connection getDBConnection() {
// Main.logger("Connecting the database ...");
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
try {
return DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
} catch (SQLException e) {
System.out.println(e.getMessage());
return null;
}
}
public Map<String, String> getGwinfo() {
return gwinfo;
}
public List<Map<String, String>> getGwsinfo() {
return gwsinfo;
}
public String getOlddestip() {
return olddestip;
}
public String getNewdestip() {
return newdestip;
}
public void setNewdestip(String newdestip) {
this.newdestip = newdestip;
}
public String getOldgwip() {
return oldgwip;
}
public void setOldgwip(String oldgwip) {
this.oldgwip = oldgwip;
}
public String getLbip() {
return lbip;
}
public void setLbip(String lbip) {
this.lbip = lbip;
}
public List<String> getNewgwsip() {
return newgwsip;
}
public void setNewgwsip(List<String> newgwsip) {
this.newgwsip = newgwsip;
}
public String getImportantsrcip() {
return importantsrcip;
}
}