Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Db prefs documentation #18

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
269 changes: 148 additions & 121 deletions src/main/java/common/db/DBPrefs.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,136 +13,163 @@
import java.util.concurrent.TimeoutException;

/**
* Created by ahmetkucuk on 28/12/15.
* Class that sets up database and rabbitmq configurations and connections
* @author - ahmetkucuk
* @author - kqian5
*/
public class DBPrefs {

// public static final String DB_HOST = "postgres-exposed";
// public static final String DB_NAME = "isd";
// public static String DB_USERNAME = "postgres";
// public static String DB_USER_PASSWORD = "r3mot3p8sswo4d";
final static String DEFAULT_RABBIT_MQ_HOST = "rabbitmq";
final static int DEFAULT_RABBIT_MQ_PORT = 5672;

final static String DEFAULT_RABBIT_MQ_HOST = "rabbitmq";
final static int DEFAULT_RABBIT_MQ_PORT = 5672;
public static final int DB_PORT = 5432;

public static final int DB_PORT = 5432;
/**
* Sets the POSTGRE database configurations in a BasicDataSource object and
* returns it
* @return - the BasicDataSource object to return
*/
public static BasicDataSource getDataSource() {

Map<String, String> env = System.getenv();

public static BasicDataSource getDataSource() {

Map<String, String> env = System.getenv();

BasicDataSource dbPoolSourc = new BasicDataSource();
BasicDataSource dbPoolSourc = new BasicDataSource();
dbPoolSourc.setSoftMinEvictableIdleTimeMillis(6500);
dbPoolSourc.setDefaultAutoCommit(true);
dbPoolSourc.setPoolPreparedStatements(false);
dbPoolSourc.setDefaultQueryTimeout(60);
dbPoolSourc.setMinIdle(1);
dbPoolSourc.setMaxIdle(10);
dbPoolSourc.setMaxTotal(100);
dbPoolSourc.setUsername(env.get("POSTGRES_USER"));
dbPoolSourc.setPassword(env.get("POSTGRES_PASSWORD"));
dbPoolSourc.setValidationQuery("SELECT 1;");
dbPoolSourc.setDriverClassName("org.postgresql.Driver");
dbPoolSourc.setUrl("jdbc:postgresql://" + env.get("POSTGRES_DB_HOST") + "/" + env.get("POSTGRES_DB"));
return dbPoolSourc;
}

/**
* Method that creates a map of all the necessary configuration settings for a
* postgres db
*
* @return - map of setting to its value
*/
public static Map<String, String> getTestEnv() {
Map<String, String> env = new HashMap<>();
env.put("POSTGRES_USER", "postgres");
env.put("POSTGRES_PASSWORD", "");
env.put("POSTGRES_DB", "postgres");
env.put("POSTGRES_DB_HOST", "localhost");
return env;
}

/**
* Method that pauses the thread for 2000 milliseconds
*/
public static void pause() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

/**
* Method that attempts to connect to database until a connection is successful
* and checks connection by perform sql command "SELECT 1"
*/
public static void waitUntilConnected() {

boolean connected = false;
Connection ex = null;
while (!connected) {
try {
DataSource dsourc = getDataSource();
try {
ex = dsourc.getConnection();
ex.setAutoCommit(true);
Statement ex1 = ex.createStatement();
connected = ex1.execute("SELECT 1;");
} catch (SQLException var7) {
System.out.println("Failed to Connect. Will retry in 2000 milliseconds.");
} finally {
if (ex != null) {
ex.close();
}

}
} catch (SQLException var9) {
System.out.println("Connection error 1. Will retry in 2000 milliseconds.");
}
pause();
System.out.println("Waiting for DB Connection. Will retry in 2000 milliseconds.");
}
try {
ex.close();
} catch (SQLException e) {
System.out.println("Error closing connection from data source.");
}
}

/**
* Method that attempts to connect to rabbitmq until a connection is successful,
* pausing for 2000 milliseconds between request
* @param host - the host to connect to
* @param port - the port to connect to
*/
public static void waitUntilRabbitMqReady(String host, int port) {
System.out.println("Sending Task");
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);

boolean connected = false;
while (!connected) {
try {
com.rabbitmq.client.Connection e = factory.newConnection();
e.close();
connected = true;
} catch (TimeoutException | IOException var5) {
var5.printStackTrace();
}

pause();
System.out.println("Waiting for Rabbit MQ Connection. Will retry in 2000 milliseconds.");
}

}

/**
* Method that sets up configurations for the connection to the Image database
* and returns a BasicDataSource object with these configurations
* @return - the BasicDataSource object
*/
public static BasicDataSource getImageDataSource() {

Map<String, String> env = System.getenv();

BasicDataSource dbPoolSourc = new BasicDataSource();
dbPoolSourc.setSoftMinEvictableIdleTimeMillis(6500);
dbPoolSourc.setDefaultAutoCommit(true);
dbPoolSourc.setPoolPreparedStatements(false);
dbPoolSourc.setDefaultQueryTimeout(60);
dbPoolSourc.setMinIdle(1);
dbPoolSourc.setMaxIdle(10);
dbPoolSourc.setMaxTotal(100);
dbPoolSourc.setUsername(env.get("POSTGRES_USER"));
dbPoolSourc.setPassword(env.get("POSTGRES_PASSWORD"));
dbPoolSourc.setValidationQuery("SELECT 1;");
dbPoolSourc.setDriverClassName("org.postgresql.Driver");
dbPoolSourc.setUrl("jdbc:postgresql://" + env.get("POSTGRES_DB_HOST") + "/" + env.get("POSTGRES_DB"));
return dbPoolSourc;
}

public static Map<String, String> getTestEnv(){
Map<String, String> env = new HashMap<>();
env.put("POSTGRES_USER", "postgres");
env.put("POSTGRES_PASSWORD", "");
env.put("POSTGRES_DB", "postgres");
env.put("POSTGRES_DB_HOST", "localhost");
return env;
}

public static void pause() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public static void waitUntilConnected() {

boolean connected = false;
Connection ex = null;
while(!connected) {
try {
DataSource dsourc = getDataSource();
try {
ex = dsourc.getConnection();
ex.setAutoCommit(true);
Statement ex1 = ex.createStatement();
connected = ex1.execute("SELECT 1;");
} catch (SQLException var7) {
System.out.println("Failed to Connect. Will retry");
} finally {
if(ex != null) {
ex.close();
}

}
} catch (SQLException var9) {
System.out.println("Connection error 1");
}
pause();
System.out.println("Waiting for DB Connection");
}
try {
ex.close();
} catch (SQLException e) {
System.out.println("Connection error 2");
}
}

public static void waitUntilRabbitMqReady(String host, int port) {
System.out.println("Sending Task");
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);

boolean connected = false;
while(!connected) {
try {
com.rabbitmq.client.Connection e = factory.newConnection();
e.close();
connected = true;
} catch (TimeoutException | IOException var5) {
var5.printStackTrace();
}

pause();
System.out.println("Waiting for Rabbit MQ Connection");
}

}

public static BasicDataSource getImageDataSource() {

Map<String, String> env = System.getenv();

BasicDataSource dbPoolSourc = new BasicDataSource();
dbPoolSourc.setSoftMinEvictableIdleTimeMillis(6500);
dbPoolSourc.setDefaultAutoCommit(true);
dbPoolSourc.setPoolPreparedStatements(false);
dbPoolSourc.setDefaultQueryTimeout(60);
dbPoolSourc.setMinIdle(2);
dbPoolSourc.setMaxIdle(10);
dbPoolSourc.setMaxTotal(100);
dbPoolSourc.setUsername(env.get("MYSQL_USER"));
dbPoolSourc.setPassword(env.get("MYSQL_PASSWORD"));
dbPoolSourc.setDriverClassName("com.mysql.jdbc.Driver");
dbPoolSourc.setUrl("jdbc:mysql://" + env.get("MYSQL_DB_HOST") + "/" + env.get("MYSQL_DB"));
return dbPoolSourc;
}

public static void waitDefaultDBConnections() {
DBPrefs.waitUntilConnected();
DBPrefs.waitUntilRabbitMqReady(DEFAULT_RABBIT_MQ_HOST, DEFAULT_RABBIT_MQ_PORT);
}
dbPoolSourc.setDefaultQueryTimeout(60);
dbPoolSourc.setMinIdle(2);
dbPoolSourc.setMaxIdle(10);
dbPoolSourc.setMaxTotal(100);
dbPoolSourc.setUsername(env.get("MYSQL_USER"));
dbPoolSourc.setPassword(env.get("MYSQL_PASSWORD"));
dbPoolSourc.setDriverClassName("com.mysql.jdbc.Driver");
dbPoolSourc.setUrl("jdbc:mysql://" + env.get("MYSQL_DB_HOST") + "/" + env.get("MYSQL_DB"));
return dbPoolSourc;
}

/**
* Method that waits until the database and rabbitmq are connected to
*/
public static void waitDefaultDBConnections() {
DBPrefs.waitUntilConnected();
DBPrefs.waitUntilRabbitMqReady(DEFAULT_RABBIT_MQ_HOST, DEFAULT_RABBIT_MQ_PORT);
}

}

21 changes: 20 additions & 1 deletion src/main/java/monitor/MonitoringRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,30 @@
import java.util.List;

/**
* Created by ahmetkucuk on 3/8/18.
* Class that acts as an embeddable HTTP server
* that can return a list of JobRecord objects from
* the database formatted in json
* @author - ahmetkucuk
* @author - kqian5
*/
public class MonitoringRunner extends NanoHTTPD{

/**
* Constructor for a MonitoringRunner object
* Starts the server to port 1278 and waits for a maximum
* of 5000 milliseconds for socket to read
* @throws IOException - thrown if error starting server
*/
public MonitoringRunner() throws IOException {
super(1278);
start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
System.out.println("\nRunning! Point your browsers to http://localhost:1278/ \n");
}

/**
* Method that constructs a new MonitoringRunner object
* and catches an exception if server fails to start
*/
public static void startServer() {
try {
new MonitoringRunner();
Expand All @@ -29,6 +43,11 @@ public static void startServer() {
}
}

/**
* Method that looks up a list of JobRecord objects in the DB
* for a specific date(10 days prior to request time) and
* formats an appropriate response in json
*/
@Override
public Response serve(IHTTPSession session) {
DateTime fromDate = DateTime.now().minusDays(10);
Expand Down