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

Refactor docker #16

Merged
merged 9 commits into from
Aug 27, 2020
Merged
85 changes: 43 additions & 42 deletions backend/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@ import { app, BrowserWindow, ipcMain, Menu } from 'electron';
import { join } from 'path';
import { format } from 'url';
import { Children } from 'react';
const { exec } = require('child_process');
const { exec } = require("child_process");
const appMenu = require('./mainMenu');
const db = require('./modal');



/************************************************************
********* CREATE & CLOSE WINDOW UPON INITIALIZATION *********
************************************************************/
Expand Down Expand Up @@ -117,14 +121,22 @@ app.on('activate', () => {
*********************** IPC CHANNELS ***********************
************************************************************/


// Listen for files upload

/* ---IMPORT DATABASE: CREATE AN INSTANCE OF DATABASE FROM A PRE-MADE .TAR OR .SQL FILE--- */
ipcMain.on('upload-file', (event, filePaths: string) => {
console.log('file paths sent from renderer', filePaths);

const isMac = process.platform === 'darwin';
let db_name: string;
if (isMac) {
db_name = filePaths[0].slice(filePaths[0].lastIndexOf('/') + 1, filePaths[0].lastIndexOf('.'));
} else {
db_name = filePaths[0].slice(filePaths[0].lastIndexOf('\\') + 1, filePaths[0].lastIndexOf('.'));
}
console.log('dbname', db_name);
// command strings
const db_name: string = 'test';
// const db_name: string = filePaths[0].slice(filePaths[0].lastIndexOf('\\') + 1, filePaths[0].lastIndexOf('.'));
const createDB : string = `docker exec postgres-1 psql -h localhost -p 5432 -U postgres -c "CREATE DATABASE ${db_name}"`;
const importFile : string = `docker cp ${filePaths} postgres-1:/data_dump`;
const runSQL : string = `docker exec postgres-1 psql -U postgres -d ${db_name} -f /data_dump`;
Expand Down Expand Up @@ -157,6 +169,11 @@ ipcMain.on('upload-file', (event, filePaths: string) => {
if (extension === '.sql') runCmd = runSQL;
else if (extension === '.tar') runCmd = runTAR;;
addDB(runCmd, () => console.log(`Created Database: ${db_name}`));
// Redirects modal towards new imported database
db.changeDB(db_name)
console.log("getConnectionString")
db.getConnectionString();
console.log(`Connected to database ${db_name}`);
}

// Step 2 : Import database file from file path into docker container
Expand All @@ -180,47 +197,31 @@ interface QueryType {

// Listen for queries being sent from renderer
ipcMain.on('execute-query', (event, data: QueryType) => {
const responseObj: any = {};
exec(
`docker exec postgres-1 psql -h localhost -p 5432 -U postgres -d test -c "EXPLAIN (FORMAT JSON, ANALYZE) ${data.queryString}"`,
(error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
console.log(`stdout-analyze: ${stdout}`);
stdout = stdout
.slice(stdout.indexOf('['), stdout.lastIndexOf(']') + 1)
.split('+')
.join('');
responseObj.analyze = stdout;
responseObj.queryLabel = data.queryLabel;
// event.sender.send('return-execute-query', stdout);
exec(
`docker exec postgres-1 psql -h localhost -p 5432 -U postgres -d test -c "${data.queryString}"`,
(error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
return;
}
responseObj.data = stdout;
console.log(`stdout-data: ${typeof stdout}`);
// stdout = stdout.slice(stdout.indexOf("["), stdout.lastIndexOf("]") + 1).split("+").join("");
event.sender.send('return-execute-query', responseObj);
}
);
}
);
// ---------Refactor-------------------
console.log('query sent from frontend', data.queryString);
//Checking to see if user wants to change db
if(data.queryString[0] === '\\' && data.queryString[1] === 'c'){
let dbName = data.queryString.slice(3);
db.changeDB(dbName);
console.log("getConnectionString")
db.getConnectionString();
event.sender.send('return-execute-query', `Connected to database ${dbName}`);
}else{
//If normal query
db.query(data.queryString)
.then(returnedData => {
//Getting data in row format for frontend
returnedData = returnedData.rows;
// Send result back to renderer
event.sender.send('return-execute-query', returnedData);
})
}



});


interface SchemaType {
currentSchema: string;
schemaString: string;
Expand Down
18 changes: 18 additions & 0 deletions backend/modal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const { Pool } = require('pg');

// postgres://username:password@hostname:port/databasename
//Defaults
let PG_URI : string = 'postgres://postgres:postgres@localhost:5432/defaultDB';
let pool : any = new Pool({ connectionString: PG_URI });

module.exports = {
query: (text, params, callback) => {
console.log('Executed query: ', text);
return pool.query(text, params, callback);
},
changeDB: (dbName : string) => {
PG_URI = 'postgres://postgres:postgres@localhost:5432/' + dbName;
pool = new Pool({ connectionString: PG_URI});
},
getConnectionString: () => {console.log(pool.connectionString)}
}
13 changes: 9 additions & 4 deletions database/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,24 @@ services:
volumes:
- database-data:/var/lib/postgresql/data
ports:
- 5432:5432
- 5001:5001
container_name: busybox-1
db:
image: postgres:12
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
# POSTGRES_DB: test
POSTGRES_DB: defaultDB
volumes:
- database-data
- database-data
depends_on:
- bb
- bb
container_name: postgres-1
ports:
- 5432:5432
hostname: localhost
networks:
- default

volumes:
database-data: # named volumes can be managed easier using docker-compose
Expand Down
5 changes: 2 additions & 3 deletions frontend/components/MainPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -523,9 +523,8 @@ class MainPanel extends Component<MainProps, MainState> {
render() {
ipcRenderer.on('return-execute-query', (event: any, data: any) => {
console.log('data', data);
let output = JSON.parse(data.analyze);
// this.setState
console.log('PARSED-ANALYZE', output, 'DATA', data.data);
// let output = JSON.parse(data.analyze);
// console.log("PARSED-ANALYZE", output, "DATA", data.data);
});
return (
<div id="main-panel">
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"build": "tsc && webpack",
"start": "cross-env NODE_ENV=production electron --noDevServer .",
"dev": "concurrently \"tsc && cross-env NODE_ENV=development webpack-dev-server --hot\" \"npm run docker\"",
"docker": "cd database && docker-compose up -d"
"docker": "cd database && docker-compose up -d",
"containerReset": "docker container stop postgres-1 && docker container prune && docker container ls -a"
},
"repository": {
"type": "git",
Expand All @@ -26,6 +27,7 @@
"codemirror": "^5.57.0",
"concurrently": "^5.3.0",
"electron": "^9.0.0",
"pg": "^8.3.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-router-dom": "^5.2.0"
Expand Down