1
0
Fork 0

Merge branch 'sharding' of https://github.com/triAGENS/ArangoDB into sharding

This commit is contained in:
Michael Hackstein 2014-02-12 16:08:31 +01:00
commit 4e6f826991
16 changed files with 590 additions and 91 deletions

View File

@ -1,2 +1,2 @@
arango> a5 = db.example.replace("1432124/3903044", { a : 5 });
arango> a5 = db.example.replace("example/3903044", { a : 5 });
{ "_id" : "example/3903044", "_key" : "3903044", "_rev" : "4099652", "_oldRev" : "4034116" }

View File

@ -8,7 +8,7 @@ jsUnity{#jsUnityIntro}
======================
The ArangoDB contains a wrapper for <a href="http://jsunity.com/">jsUnity</a>, a
lightyweight universal JavAScript unit testing framework.
lightyweight universal JavaScript unit testing framework.
Running jsUnity Tests{#jsUnityRunningTest}
==========================================

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1,12 @@
.scenarioImage{
@extend %clickable;
height : 70%;
width : auto;
}
li.bigtile {
@extend li.tile;
height:250px;
width: 345px;
}

View File

@ -0,0 +1,15 @@
// Shortcuts for multi-browser support
@import "mixins";
// All Abstract classes
@import "colors";
// All Abstract classes
@import "abstracts";
// Navbar
@import "navbar";
// Footer
@import "footer";
// List tiles
@import "tiles";
// Shared classes
@import "resizing";

View File

@ -0,0 +1,238 @@
div.navlogo, ul.navlist li, ul.link-dropdown-menu, div.footer-left, li.tile, li.bigtile {
float: left; }
div.navmenu, div.footer-right, li.tile div.iconSet span, li.bigtile div.iconSet span {
float: right; }
li.tile div.iconSet span, li.bigtile div.iconSet span, .scenarioImage {
cursor: pointer; }
nav.navbar, footer.footer {
position: fixed;
left: 0px;
right: 0px;
width: 100%;
background-color: #333232;
color: white;
z-index: 1000; }
nav.navbar {
top: 0px;
height: 34px;
margin-bottom: 3px; }
ul.navlist {
list-style: none; }
ul.navlist li {
margin-left: 1px; }
ul.navlist > li.active,
ul.navlist li.dropdown-item:hover,
ul.navlist > li:hover {
background-color: #8aa051; }
a.tab {
padding-top: 7px;
padding-left: 10px;
padding-bottom: 10px;
padding-right: 10px;
color: white;
display: block; }
ul.link-dropdown-menu {
position: absolute;
top: 80%;
right: 0px;
z-index: 1000;
display: none;
padding: 5px 0px;
margin: 2px 0px 0px;
list-style: none;
background-color: white;
border-style: solid;
border-color: rgba(0, 0, 0, 0.2);
border-width: 1px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border-radius: 6px; }
ul.link-dropdown-menu li {
line-height: 20px;
white-space: nowrap;
width: 100%; }
ul.link-dropdown-menu li.dropdown-header {
font-weight: bold;
font-size: 11px;
color: #999999;
padding: 0px 20px;
text-transform: uppercase; }
ul.link-dropdown-menu li.divider {
background-color: #e5e5e5;
height: 1px;
margin: 10px 1px; }
ul.link-dropdown-menu a {
color: #333232;
padding: 0px 20px; }
.link-dropdown-menu:before {
position: absolute;
top: -7px;
right: 7px;
position: absolute;
border-width: 7px;
border-style: solid;
border-color: transparent;
border-top: none;
border-bottom-color: rgba(0, 0, 0, 0.2);
display: inline-block;
content: ''; }
.link-dropdown-menu:after {
top: -6px;
right: 8px;
position: absolute;
border-width: 7px;
border-style: solid;
border-color: transparent;
border-top: none;
border-bottom-color: white;
display: inline-block;
content: ''; }
#arangoCollectionSelect {
display: none;
float: right;
padding-bottom: 0;
margin-bottom: 0;
margin-right: 15px; }
footer.footer {
bottom: 0px;
height: 40px; }
footer.footer p {
padding-top: 10px;
padding-bottom: 10px;
margin-bottom: 0; }
div#collectionsThumbnailsIn {
margin-left: 0px; }
li.tile, li.bigtile {
position: relative;
text-align: center;
height: 100px;
width: 230px;
margin-left: 6px;
margin-right: 6px;
margin-bottom: 13px;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none; }
li.tile h5, li.bigtile h5 {
font-size: 12px;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
color: white;
background: #686766;
padding: 4px 8px;
margin: 0; }
li.tile div.iconSet, li.bigtile div.iconSet {
position: absolute;
top: 5px;
right: 5px; }
li.tile div.iconSet span, li.bigtile div.iconSet span {
opacity: 0.5;
font-size: 18px;
padding-left: 7px; }
li.tile div.iconSet span:hover, li.bigtile div.iconSet span:hover {
opacity: 1.0; }
li.tile div.iconSet span.disabled, li.bigtile div.iconSet span.disabled {
opacity: 0.2;
cursor: default; }
li.tile .badge-success, li.bigtile .badge-success {
font-weight: 300; }
li.tile .unloaded div, li.bigtile .unloaded div {
border-bottom: 16px solid #FF8F35; }
li.tile .deleted div, li.bigtile .deleted div {
border-bottom: 16px solid red; }
.collectionName {
text-align: left;
font-weight: 300;
position: absolute;
bottom: 0px;
left: 0px;
right: 0px; }
div.resizecontainer {
margin: 0px auto; }
div.resizecontainer:after {
clear: both;
content: ".";
display: block;
font-size: 0px;
height: 0px;
visibility: hidden; }
@media (max-width: 798px) {
#arangoCollectionUl {
display: none; }
#collectionsDropdown ul {
width: auto !important; }
#arangoCollectionSelect {
display: inline-block; } }
@media (min-width: 799px) and (max-width: 1041px) {
#arangoCollectionUl a {
font-size: 11px;
padding: 7px 5px 10px; } }
@media (min-width: 1042px) and (max-width: 1284px) {
#arangoCollectionUl a {
font-size: 13px; } }
@media (min-width: 72px) and (max-width: 314px) {
div.resizecontainer {
width: 0px; } }
@media (min-width: 314px) and (max-width: 556px) {
div.resizecontainer {
width: 242px; } }
@media (min-width: 556px) and (max-width: 798px) {
div.resizecontainer {
width: 484px; } }
@media (min-width: 798px) and (max-width: 1040px) {
div.resizecontainer {
width: 726px; } }
@media (min-width: 1040px) and (max-width: 1282px) {
div.resizecontainer {
width: 968px; } }
@media (min-width: 1282px) and (max-width: 1524px) {
div.resizecontainer {
width: 1210px; } }
@media (min-width: 1524px) and (max-width: 1766px) {
div.resizecontainer {
width: 1452px; } }
@media (min-width: 1766px) and (max-width: 2008px) {
div.resizecontainer {
width: 1694px; } }
@media (min-width: 2008px) and (max-width: 2250px) {
div.resizecontainer {
width: 1936px; } }
@media (min-width: 2250px) and (max-width: 2492px) {
div.resizecontainer {
width: 2178px; } }
@media (min-width: 2492px) and (max-width: 2734px) {
div.resizecontainer {
width: 2420px; } }
@media (min-width: 2734px) and (max-width: 2976px) {
div.resizecontainer {
width: 2662px; } }
div.centralRow {
margin-top: 65px;
margin-bottom: 65px; }
.scenarioImage {
height: 70%;
width: auto; }
li.bigtile {
height: 250px;
width: 345px; }

View File

@ -0,0 +1,4 @@
//shared
@import "shared";
// the images used in the planner
@import "plannerImages";

View File

@ -1,20 +1,8 @@
// Shortcuts for multi-browser support
@import "mixins";
// All colours
@import "colors";
//shared
@import "shared";
// Fonts and font bindings
@import "fonts";
// All Abstract classes
@import "abstracts";
// Shared classes
@import "resizing";
// Buttons
// @import "buttons";
// Navbar
@import "navbar";
// Navbar
@import "statMenu";
// Footer
@import "footer";
// List tiles
@import "tiles";

View File

@ -170,9 +170,9 @@
]
},
"planner.css": {
"css/planner.css": {
"files": [
"frontend/scss/planner.css"
]
},

View File

@ -4,6 +4,6 @@
<meta name="description" content="ArangoDB Cluster Planner Interface">
<meta name="author" content="Florian Bartels, Michael Hackstein">
<link href="css/style.css" rel="stylesheet">
<link href="css/sass.css" rel="stylesheet">
<link href="css/planner.css" rel="stylesheet">
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
</head>

View File

@ -5,34 +5,22 @@
</div>
</ul>
<div class="content">
<form action="javascript:void(0);" autocomplete="on" class="form-horizontal" id="planSelectionDialog">
<fieldset>
<div class="control-group">
<fieldset id="scenario">
<legend class="gv_inner">Please select a cluster scenario:</legend>
<div class="plain" id="multiServerAsymmetrical>
<img src="img/multiMachineSym.png" height="50" width="50" alt="" class="icon">
</div>
<div class="plain" id="multiServerSymmetrical">
<img src="img/multiMachineAsym.png" height="50" width="50" alt="" class="icon">
</div>
<div class="plain" id="singleServer">
<img src="img/icon_unknown.png" height="50" width="50" alt="" class="icon">
</div>
<div class="thumbnails">
<div>
<legend class="gv_inner">Please select a cluster scenario:</legend>
</fieldset>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn btn-primary" id="createViewer" >Start</button>
</div>
</div>
</fieldset>
</form>
<li class="bigtile" id="multiServerSymmetrical">
<img src="img/multiMachineSym.png" class="scenarioImage" alt="">
<h5 class="collectionName">Multi Machine Symmetrical</h5>
</li>
<li class="bigtile" id="multiServerAsymmetrical">
<img src="img/multiMachineAsym.png" class="scenarioImage" alt="">
<h5 class="collectionName">Multi Machine Asymmetrical</h5>
</li>
<li class="bigtile" id="singleServer">
<img src="img/singleMachine.png" class="scenarioImage" alt="">
<h5 class="collectionName">Single Machine</h5>
</li>
</div>
</div>
</div>

View File

@ -12,35 +12,28 @@
events: {
/* "click input[type='radio'][name='loadtype']": "toggleLoadtypeDisplay",
"click #createViewer": "createViewer",
"click #add_label": "insertNewLabelLine",
"click #add_colour": "insertNewColourLine",
"click #add_group_by": "insertNewGroupLine",
"click input[type='radio'][name='colour']": "toggleColourDisplay",
"click .gv_internal_remove_line": "removeAttrLine",
"click #manageGraphs": "showGraphManager"*/
"click #multiServerSymmetrical": "multiServerSymmetrical",
"click #multiServerAsymmetrical": "multiServerAsymmetrical",
"click #singleServer": "singleServer"
},
showGraphManager: function() {
window.App.navigate("graphManagement", {trigger: true});
},
/*
removeAttrLine: function(e) {
var g = $(e.currentTarget)
.parent()
.parent(),
set = g.parent();
set.get(0).removeChild(g.get(0));
},
*/
render: function() {
$(this.el).html(this.template.render({}));
},
multiServerSymmetrical: function() {
window.App.navigate(
"planSymmetrical", {trigger: true}
);
},
multiServerAsymmetrical: function() {
window.App.navigate(
"planAsymmetrical", {trigger: true}
);
},
singleServer: function() {
window.App.navigate(
"planTest", {trigger: true}
);
}
});
}());

View File

@ -0,0 +1,260 @@
// Karma configuration
// Generated on Thu Jul 04 2013 11:39:34 GMT+0200 (CEST)
module.exports = function(karma) {
karma.set({
// base path, that will be used to resolve files and exclude
basePath: '../../',
// frameworks to use
//frameworks: ['jasmine', 'junit-reporter'],
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'test/lib/jasmine-1.3.1/jasmine-html.js',
'test/lib/jslint.js',
'frontend/js/lib/jquery-1.8.3.js',
'frontend/js/lib/jquery-ui-1.9.2.custom.js',
'frontend/js/lib/jquery.dataTables.js',
'frontend/js/lib/jquery.autogrow.js',
'frontend/js/lib/jquery.jeditable.js',
'frontend/js/lib/jquery.jeditable.autogrow.js',
'frontend/js/lib/jquery.snippet.js',
'frontend/js/lib/jquery.gritter.js',
'frontend/js/lib/jquery.slideto.min.js',
'frontend/js/lib/jquery.wiggle.min.js',
'frontend/js/lib/jquery.ba-bbq.min.js',
'frontend/js/lib/jquery.contextmenu.js',
'frontend/js/lib/handlebars-1.0.rc.1.js',
'frontend/js/lib/underscore.js',
'frontend/js/lib/backbone.js',
'frontend/js/lib/d3.v3.min.js',
'frontend/js/lib/nv.d3.js',
'frontend/js/lib/d3.fisheye.js',
'frontend/js/lib/ejs_0.9_alpha_1_production.js',
'frontend/js/lib/ColVis.js',
'frontend/js/lib/bootstrap.js',
'frontend/js/lib/bootstrap-pagination.js',
'frontend/src/ace.js',
'frontend/js/lib/jqconsole.min.js',
'frontend/js/lib/splitter.js',
'frontend/js/lib/swagger.js',
'frontend/js/lib/swagger-ui.js',
'frontend/js/lib/highlight.7.3.pack.js',
// arangodb
'frontend/js/arango/arango.js',
'frontend/js/arango/templateEngine.js',
'frontend/js/shell/browser.js',
'frontend/js/modules/org/arangodb/arango-collection-common.js',
'frontend/js/modules/org/arangodb/arango-collection.js',
'frontend/js/modules/org/arangodb/arango-database.js',
'frontend/js/modules/org/arangodb/arango-query-cursor.js',
'frontend/js/modules/org/arangodb/arango-statement-common.js',
'frontend/js/modules/org/arangodb/arango-statement.js',
'frontend/js/modules/org/arangodb/arangosh.js',
'frontend/js/modules/org/arangodb/graph-common.js',
'frontend/js/modules/org/arangodb/graph.js',
'frontend/js/modules/org/arangodb/mimetypes.js',
'frontend/js/modules/org/arangodb/simple-query-common.js',
'frontend/js/modules/org/arangodb/simple-query.js',
'frontend/js/modules/org/arangodb/aql/functions.js',
'frontend/js/modules/org/arangodb/graph/traversal.js',
'frontend/js/modules/org/arangodb-common.js',
'frontend/js/modules/org/arangodb.js',
'frontend/js/bootstrap/errors.js',
'frontend/js/bootstrap/monkeypatches.js',
'frontend/js/bootstrap/module-internal.js',
'frontend/js/client/bootstrap/module-internal.js',
'frontend/js/client/client.js',
// Mocks
'test/mocks/disableEJS.js',
'test/specs/graphViewer/helper/eventHelper.js',
'test/specs/graphViewer/helper/objectsHelper.js',
'test/specs/graphViewer/helper/mocks.js',
'test/specs/graphViewer/helper/commMock.js',
'test/specs/graphViewer/helper/uiMatchers.js',
// GraphViewer
// Core Modules
'frontend/js/graphViewer/graphViewer.js',
'frontend/js/graphViewer/graph/domObserverFactory.js',
'frontend/js/graphViewer/graph/colourMapper.js',
'frontend/js/graphViewer/graph/communityNode.js',
'frontend/js/graphViewer/graph/webWorkerWrapper.js',
'frontend/js/graphViewer/graph/nodeShaper.js',
'frontend/js/graphViewer/graph/abstractAdapter.js',
'frontend/js/graphViewer/graph/JSONAdapter.js',
'frontend/js/graphViewer/graph/arangoAdapter.js',
'frontend/js/graphViewer/graph/foxxAdapter.js',
'frontend/js/graphViewer/graph/previewAdapter.js',
'frontend/js/graphViewer/graph/edgeShaper.js',
'frontend/js/graphViewer/graph/forceLayouter.js',
'frontend/js/graphViewer/graph/eventDispatcher.js',
'frontend/js/graphViewer/graph/eventLibrary.js',
'frontend/js/graphViewer/graph/zoomManager.js',
'frontend/js/graphViewer/graph/nodeReducer.js',
'frontend/js/graphViewer/graph/modularityJoiner.js',
// UI Modules
'frontend/js/graphViewer/ui/modalDialogHelper.js',
'frontend/js/graphViewer/ui/contextMenuHelper.js',
'frontend/js/graphViewer/ui/nodeShaperControls.js',
'frontend/js/graphViewer/ui/edgeShaperControls.js',
'frontend/js/graphViewer/ui/arangoAdapterControls.js',
'frontend/js/graphViewer/ui/layouterControls.js',
'frontend/js/graphViewer/ui/uiComponentsHelper.js',
'frontend/js/graphViewer/ui/eventDispatcherControls.js',
'frontend/js/graphViewer/ui/graphViewerUI.js',
'frontend/js/graphViewer/ui/graphViewerWidget.js',
'frontend/js/graphViewer/ui/graphViewerPreview.js',
// Models
'frontend/js/models/currentDatabase.js',
'frontend/js/models/arangoCollection.js',
'frontend/js/models/arangoDatabase.js',
'frontend/js/models/arangoDocument.js',
'frontend/js/models/arangoLog.js',
'frontend/js/models/arangoStatistics.js',
'frontend/js/models/arangoStatisticsDescription.js',
'frontend/js/models/foxx.js',
'frontend/js/models/graph.js',
'frontend/js/models/clusterServer.js',
'frontend/js/models/clusterCoordinator.js',
'frontend/js/models/clusterDatabase.js',
'frontend/js/models/clusterCollection.js',
'frontend/js/models/clusterShard.js',
// Collections
'frontend/js/collections/arangoCollections.js',
'frontend/js/collections/arangoDocuments.js',
'frontend/js/collections/arangoDocument.js',
'frontend/js/collections/arangoDatabase.js',
'frontend/js/collections/arangoLogs.js',
'frontend/js/collections/arangoSession.js',
'frontend/js/collections/arangoStatisticsCollection.js',
'frontend/js/collections/arangoStatisticsDescriptionCollection.js',
'frontend/js/collections/foxxCollection.js',
'frontend/js/collections/graphCollection.js',
'frontend/js/collections/clusterServers.js',
'frontend/js/collections/clusterCoordinators.js',
'frontend/js/collections/clusterDatabases.js',
'frontend/js/collections/clusterCollections.js',
'frontend/js/collections/clusterShards.js',
// Views
'frontend/js/views/navigationView.js',
'frontend/js/views/apiView.js',
'frontend/js/views/footerView.js',
'frontend/js/views/queryView.js',
'frontend/js/views/shellView.js',
'frontend/js/views/dashboardView.js',
'frontend/js/views/collectionsView.js',
'frontend/js/views/collectionView.js',
'frontend/js/views/collectionInfoView.js',
'frontend/js/views/newCollectionView.js',
'frontend/js/views/collectionsItemView.js',
'frontend/js/views/documentsView.js',
'frontend/js/views/documentView.js',
'frontend/js/views/documentSourceView.js',
'frontend/js/views/logsView.js',
'frontend/js/views/applicationsView.js',
'frontend/js/views/foxxActiveView.js',
'frontend/js/views/foxxActiveListView.js',
'frontend/js/views/foxxInstalledView.js',
'frontend/js/views/foxxInstalledListView.js',
'frontend/js/views/foxxEditView.js',
'frontend/js/views/foxxMountView.js',
'frontend/js/views/appDocumentationView.js',
'frontend/js/views/graphView.js',
'frontend/js/views/graphManagementView.js',
'frontend/js/views/addNewGraphView.js',
'frontend/js/views/deleteGraphView.js',
'frontend/js/views/dbSelectionView.js',
'frontend/js/views/editListEntryView.js',
'frontend/js/views/loginView.js',
'frontend/js/views/clusterDashboardView.js',
'frontend/js/views/clusterOverviewView.js',
'frontend/js/views/clusterServerView.js',
'frontend/js/views/clusterCoordinatorView.js',
'frontend/js/views/clusterDatabaseView.js',
'frontend/js/views/clusterCollectionView.js',
'frontend/js/views/clusterShardsView.js',
//Views Planner
'plannerFrontend/js/views/planScenarioSelectorView.js',
'plannerFrontend/js/views/planTestView.js',
// Router
'frontend/js/routers/router.js',
'plannerFrontend/js/routers/plannerRouter.js',
//Templates
{pattern: 'frontend/js/templates/*.ejs', served:true, included:false, watched: true},
{pattern: 'plannerFrontend/js/templates/*.ejs', served:true, included:false, watched: true},
// Specs
// GraphViewer
//Router
'test/specs/planner/router/routerSpec.js',
'test/specs/planner/views/planScenarioSelectorViewSpec.js'
],
// list of files to exclude
exclude: [
],
// test results reporter to use
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
reporters: ['dots'],
// web server port
port: 9876,
// cli runner port
runnerPort: 9100,
// enable / disable colors in the output (reporters and logs)
colors: false,
// level of logging
// possible values: karma.LOG_DISABLE || karma.LOG_ERROR || karma.LOG_WARN || karma.LOG_INFO || karma.LOG_DEBUG
logLevel: karma.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers: ["PhantomJS", "Firefox"],
// If browser does not capture in given timeout [ms], kill it
captureTimeout: 60000,
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: true
});
};

View File

@ -7,16 +7,16 @@
describe("PlanScenarioSelector View", function() {
var myView;
window.App = function() {};
window.App.navigate = function() {};
var myView;
beforeEach(function() {
$('body').append('<div id="content" class="removeMe"></div>');
myView = new window.CollectionView({
model: arangoCollection
});
$('body').append('<div id="content" class="removeMe"></div>');
window.App = {
navigate: function() {}
};
spyOn(window.App, "navigate");
myView = new window.PlanScenarioSelectorView();
myView.render();
});
@ -25,21 +25,22 @@
});
describe("Collection Changes", function() {
it("Check if changes were submitted", function() {
describe("select scenario", function() {
it("multiServerSymmetrical", function() {
$("#multiServerSymmetrical").click();
expect(App.navigate).toHaveBeenCalledWith("planSymmetrical", {trigger: true});
var pressedEnter = false;
myView.render();
spyOn(myView, 'saveModifiedCollection').andCallFake(function(request) {
pressedEnter = true;
});
myView.saveModifiedCollection();
expect(pressedEnter).toBeTruthy();
});
it("multiServerAsymmetrical", function() {
$("#multiServerAsymmetrical").click();
expect(App.navigate).toHaveBeenCalledWith("planAsymmetrical", {trigger: true});
});
it("singleServer", function() {
$("#singleServer").click();
expect(App.navigate).toHaveBeenCalledWith("planTest", {trigger: true});
});
});
});
}());