1
0
Fork 0
arangodb/js/server/modules/@arangodb/pregel.js

107 lines
3.5 KiB
JavaScript

/* jshint strict: false */
// //////////////////////////////////////////////////////////////////////////////
// / DISCLAIMER
// /
// /
// / Licensed under the Apache License, Version 2.0 (the "License")
// / you may not use this file except in compliance with the License.
// / You may obtain a copy of the License at
// /
// / http://www.apache.org/licenses/LICENSE-2.0
// /
// / Unless required by applicable law or agreed to in writing, software
// / distributed under the License is distributed on an "AS IS" BASIS,
// / WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// / See the License for the specific language governing permissions and
// / limitations under the License.
// /
// / Copyright holder is ArangoDB GmbH, Cologne, Germany
// /
// / @author Simon Grätzer
// / @author Copyright 2016, ArangoDB GmbH, Cologne, Germany
// //////////////////////////////////////////////////////////////////////////////
const internal = require('internal');
// //////////////////////////////////////////////////////////////////////////////
// / @brief creates a new pregel execution
// //////////////////////////////////////////////////////////////////////////////
var startExecution = function(algo, data, params) {
if (typeof algo !== 'string' || !data) {
throw "Invalid parameters: pregel(algorithm, graph, params)" +
"<graph> can be either {vertexCollections:['',..], edgeCollection: ''}" +
" or {graphName:'<graph>'} or graph name";
;
}
// check start vertex
// -----------------------------------------
if (!algo || typeof algo !== 'string') {
throw "Invalid parameters: pregel(<algorithm>, <graph>, <params>)";
}
params = params || {};
let db = internal.db;
if (typeof data === 'object' && !data.graphName) {
let vcs;
if (data.vertexCollection && typeof data.vertexCollection === 'string') {
vcs = [data.vertexCollection];
} else if (data.vertexCollections && data.vertexCollections instanceof Array) {
vcs = data.vertexCollections;
}
let edges;
if (typeof data.edgeCollection === 'string') {
edges = [data.edgeCollection];
} else if (data.edgeCollections && data.edgeCollections instanceof Array) {
edges = data.edgeCollections;
}
if (!edges || !vcs) {
throw "no vertex or edge collections specified";
}
return db._pregelStart(algo, vcs, edges, params);
}
let name;// name of graph
if (typeof data === 'string') {
name = data;
} else if (data.graphName && typeof data.graphName === 'string') {
name = data.graphName;
}
var graph_module;
if (internal.isEnterprise()) {
graph_module = require('@arangodb/smart-graph');
} else {
graph_module = require('@arangodb/general-graph');
}
let graph = graph_module._graph(name);
if (graph) {
let vertexCollections = [];
let vcs = graph._vertexCollections(true);
for (var key in vcs) {
vertexCollections.push(vcs[key].name());
}
let edges = graph._edgeCollections();
if (edges.length > 0) {
var edgeCollections = edges.map(e => e.name());
return db._pregelStart(algo, vertexCollections,
edgeCollections, params);
} else {
throw "No edge collection specified";
}
} else {
throw 'invalid graphname';
}
};
exports.start = startExecution;
exports.status = function (executionID) {
let db = internal.db;
return db._pregelStatus(executionID);
};
exports.cancel = function (executionID) {
let db = internal.db;
return db._pregelCancel(executionID);
};