Skip to content

Commit

Permalink
basic support for networked databases using leveldb
Browse files Browse the repository at this point in the history
  • Loading branch information
heapwolf committed Nov 30, 2014
1 parent 4ea49d0 commit e7c1dd9
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 14 deletions.
2 changes: 1 addition & 1 deletion assets/html/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<html><head><link rel="stylesheet" href="../css/codemirror.css"/><link rel="stylesheet" href="../css/index.css"/><script src="../../client.js"></script></head><body><header><ul class="horizontal"><li><a href="#" class="ss-icon query">search</a></li><li><a href="#" class="ss-icon put">pencil</a></li><li><a h="h" ref="#" class="ss-icon connections">database</a></li><li><a href="#" class="ss-icon settings">cog</a></li></ul></header></body></html><section class="query"><div class="controls"><div class="control"><input type="text" placeholder="Upper Bound" class="upperbound"/></div><div class="control"><input type="text" placeholder="Lower Bound" class="lowerbound"/></div><div class="control"><input type="checkbox" id="reverse" name="reverse"/><label for="reverse" class="reverse custom-checkbox">Reverse</label></div><div class="control"><input name="limit" type="text" class="limit"/></div><div class="control"><input name="limit" type="button" value="Delete" class="delete"/></div></div><div class="results"><div class="keys"><select multiple="multiple"><option>key.namea</option><option>key.nameb</option><option>key.namec</option></select></div><div class="split"></div><div class="value"><textarea class="codemirror"></textarea></div></div></section><section class="put"><div class="controls"><div class="control"><input type="button" value="Save"/></div><div class="control"><input type="text" placeholder="Key Encoding"/></div><div class="control"><input type="text" placeholder="Value Encoding"/></div></div><div class="key"><textarea class="codemirror"></textarea></div><div class="value"><textarea class="codemirror"></textarea></div></section><section class="connections"><div class="connection-options"><div class="heading"><div class="large-icon ss-icon">folder</div><h2>Local Connection</h2></div><div class="option"><input type="text" placeholder="/path/to/database" class="path"/><input type="button" value="Open" class="openDirectory"/></div><div class="heading"><div class="large-icon ss-icon">cloud</div><h2>Network Connection</h2></div><div class="option"><input type="text" placeholder="tcp://127.0.0.1:8001" class="address"/><input type="button" value="Connect" class="openConnection"/></div></div></section><section class="settings"><p>Settings</p></section><div class="modal-overlay"></div>
<html><head><link rel="stylesheet" href="../css/codemirror.css"/><link rel="stylesheet" href="../css/index.css"/><script src="../../client.js"></script></head><body><header><ul class="horizontal"><li><a href="#" class="ss-icon query">search</a></li><li><a href="#" class="ss-icon put">pencil</a></li><li><a h="h" ref="#" class="ss-icon connections">database</a></li><li><a href="#" class="ss-icon settings">cog</a></li></ul></header></body></html><section class="query"><div class="controls"><div class="control"><input type="text" placeholder="Upper Bound" class="upperbound"/></div><div class="control"><input type="text" placeholder="Lower Bound" class="lowerbound"/></div><div class="control"><input type="checkbox" id="reverse" name="reverse"/><label for="reverse" class="reverse custom-checkbox">Reverse</label></div><div class="control"><input name="limit" type="text" class="limit"/></div><div class="control"><input name="limit" type="button" value="Delete" class="delete"/></div></div><div class="results"><div class="keys"><select multiple="multiple"><option>key.namea</option><option>key.nameb</option><option>key.namec</option></select></div><div class="split"></div><div class="value"><textarea class="codemirror"></textarea></div></div></section><section class="put"><div class="controls"><div class="control"><input type="button" value="Save"/></div><div class="control"><input type="text" placeholder="Key Encoding"/></div><div class="control"><input type="text" placeholder="Value Encoding"/></div></div><div class="key"><textarea class="codemirror"></textarea></div><div class="value"><textarea class="codemirror"></textarea></div></section><section class="connections"><div class="connection-options"><div class="heading"><div class="large-icon ss-icon">folder</div><h2>Local Connection</h2></div><div class="option"><input type="text" placeholder="/path/to/database" class="path"/><input type="button" value="Open" class="openDirectory"/></div><div class="heading"><div class="large-icon ss-icon">cloud</div><h2>Network Connection</h2></div><div class="option"><input type="text" placeholder="tcp://127.0.0.1:8001" class="host"/><input type="button" value="Connect" class="openConnection"/></div></div></section><section class="settings"><p>Settings</p></section><div class="modal-overlay"></div>
2 changes: 1 addition & 1 deletion layouts/sections/connections.jade
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ section.connections
.large-icon.ss-icon cloud
h2 Network Connection
.option
input.address(type="text" placeholder="tcp://127.0.0.1:8001")
input.host(type="text" placeholder="tcp://127.0.0.1:8001")
input.openConnection(type="button", value="Connect")

32 changes: 22 additions & 10 deletions lib/connections.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,39 @@ var remote = require('remote');
var query = require('./query');
var db = require('./db');

//var browserWindow = remote.require('browser-window');
var dialog = remote.require('dialog');

exports.init = function(database, config) {

var section = document.querySelector('section.connections');
var pathInput = section.querySelector('input.path');
var hostInput = section.querySelector('input.host');
var openBtn = section.querySelector('input.openDirectory');

dom.on(openBtn, 'click', function() {
var connectBtn = section.querySelector('input.openConnection');

var win = remote.getCurrentWindow();
var win = remote.getCurrentWindow();

var opts = {
title: 'Connected',
message: 'Connection successful...',
buttons: ['OK']
};
var opts = {
title: 'Connected',
message: 'Connection successful...',
buttons: ['OK']
};

try {
dom.on(connectBtn, 'click', function() {
if (database.handle && database.handle.isOpen()) {
database.handle.close();
}
database.handle = db(hostInput.value, config);
query.getKeys(database, config);

});

dom.on(openBtn, 'click', function() {

try {
if (database.handle && database.handle.isOpen()) {
database.handle.close();
}
database.handle = db(pathInput.value, config);

dialog.showMessageBox(win, opts, function() {
Expand Down
44 changes: 42 additions & 2 deletions lib/db.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,46 @@
var level = require('levelup');
var net = require('net');
var multilevel = require('multilevel');
var remote = require('remote');
var dialog = remote.require('dialog');

module.exports = function(path, args) {
return level(path, args);
module.exports = function(path, config) {

if (path && path.indexOf(':') > -1) {

var opts = {
title: 'Connected',
message: 'Connection successful...',
buttons: ['OK']
};

var win = remote.getCurrentWindow();
var db = multilevel.client();
var connection = path.split(':');
var port = connection[connection.length-1];
var host = connection[connection.length-2];

if (!port || !host) {
opts.title = 'Error';
opts.message = 'A port and host are required';
return dialog.showMessageBox(win, opts);
}

var con = net.connect(parseInt(port));

con.on('connect', function(err) {
if (err) {
opts.title = 'Error';
opts.message = err;
}
dialog.showMessageBox(win, opts);
});

con.pipe(db.createRpcStream()).pipe(con);

return db;
}

return level(path, config);
};

1 change: 1 addition & 0 deletions lib/query.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,4 @@ exports.init = function(db, config) {

exports.onShow = function() {
};

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"jade": "^1.7.0",
"leveldown": "^1.0.0",
"levelup": "^0.19.0",
"multilevel": "^6.0.1",
"rc": "^0.5.4",
"stylus": "^0.49.3",
"xtend": "^4.0.0"
Expand Down

0 comments on commit e7c1dd9

Please sign in to comment.