Revert "BUG-410 -- update RIFT platform"
[osm/UI.git] / skyquake / framework / core / modules / plugin_discoverer.js
1
2 /*
3 *
4 * Copyright 2016 RIFT.IO Inc
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 */
19
20 /**
21 * plugin_discoverer module. Static plugin discovery at bootstrap
22 * and dynamic plugin discovery during runtime.
23 * @module framework/core/modules/plugin_discoverer
24 * @author Kiran Kashalkar <kiran.kashalkar@riftio.com>
25 */
26 var path = require('path');
27 var fs = require('fs');
28 var util = require('util');
29 var skyquakeEmitter = require('./skyquakeEmitter');
30
31
32 var plugins_path = '';
33
34 /**
35 * Module initialization function
36 */
37 function init() {
38
39 }
40
41 /**
42 * Module configuration function
43 * @param {Object} config - configuration object
44 */
45 function config(config) {
46 plugins_path = config.plugins_path;
47 }
48
49 /**
50 * Module run function.
51 */
52 function run() {
53
54 fs.readdir(plugins_path, function(err, filenames) {
55 if (!err) {
56 filenames.forEach(function(filename) {
57 fs.stat(plugins_path + '/' + filename, function(err, stats) {
58 if (!err) {
59 if (stats.isDirectory()) {
60 skyquakeEmitter.emit('plugin_discoverer.plugin_discovered', filename, path.join(plugins_path, path.sep, filename));
61 }
62 }
63 });
64 });
65 }
66 });
67
68 // Watch for modifications and new plugins
69 fs.watch(plugins_path, {persistent: true, recursive: true}, function(event, filename) {
70 var splitPath = filename.split(path.sep)
71 skyquakeEmitter.emit('plugin_discoverer.plugin_updated', splitPath[0], filename);
72 });
73 }
74
75
76 module.exports = {
77 init: init,
78 config: config,
79 run: run
80 };