branch develop updated (fc9ba1a -> 327132f)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository mum. See http://git.chorem.org/mum.git from fc9ba1a changing a page doesn't close websocket anymore + scan page fixed (now use the same controller as other pages) new db30db4 autoconfiguration of detected hosts by modules : OK new b52c260 test monitoring sur localhost : OK new 327132f règle .gitignore pour les .pyc ajoutée The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 327132ff3d2306fcb65a3adf3f988a540b1b4a25 Author: Alexis Guilbaud <guilbaud@codelutin.com> Date: Tue Feb 24 17:06:10 2015 +0100 règle .gitignore pour les .pyc ajoutée commit b52c260056c477b1d44043c76b3e5efc2b938dbc Author: Alexis Guilbaud <guilbaud@codelutin.com> Date: Tue Feb 24 17:02:26 2015 +0100 test monitoring sur localhost : OK commit db30db467b2c6259b7a943531f440c0aa71f4e44 Author: Alexis Guilbaud <guilbaud@codelutin.com> Date: Tue Feb 24 15:03:41 2015 +0100 autoconfiguration of detected hosts by modules : OK Summary of changes: .gitignore | 4 +- app/app.py | 6 +- app/module_loader.py | 18 +-- app/modules/detection_modules/nmap_detection.py | 12 +- app/modules/monitoring_modules/unix/disk.py | 3 +- app/modules/monitoring_modules/unix/memory.py | 4 +- .../monitoring_modules/unix/updated_packages.py | 8 +- app/modules/storage_modules/shelve_db.py | 122 ++++++++++++--------- static/js/controllers/mainCtrl.js | 30 ++++- views/dashboard.html | 2 +- views/hostpage.html | 2 +- 11 files changed, 128 insertions(+), 83 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository mum. See http://git.chorem.org/mum.git commit db30db467b2c6259b7a943531f440c0aa71f4e44 Author: Alexis Guilbaud <guilbaud@codelutin.com> Date: Tue Feb 24 15:03:41 2015 +0100 autoconfiguration of detected hosts by modules : OK --- app/app.py | 4 +- app/module_loader.py | 18 +++--- app/modules/detection_modules/nmap_detection.py | 12 ++-- app/modules/storage_modules/shelve_db.py | 83 +++++++++++++------------ static/js/controllers/mainCtrl.js | 20 ++++-- views/dashboard.html | 2 +- views/hostpage.html | 2 +- 7 files changed, 79 insertions(+), 62 deletions(-) diff --git a/app/app.py b/app/app.py index 0e9f74f..4a07abf 100755 --- a/app/app.py +++ b/app/app.py @@ -36,7 +36,9 @@ class ThreadDetect(threading.Thread): def run(self): db = module_loader.load_db() conn_mod_list = module_loader.get_conection_modules_list() - scanned_ip = module_loader.run_nmap_detection(self.ip_range, db, self.ws, conn_mod_list) + scanned_ip = module_loader.run_nmap_detection(self.ip_range, db, self.ws, + module_loader.get_conection_modules_list(), + module_loader.get_info_mod_monitoring()) self.ws.send(json.dumps({SUCCESS_MODULE: scanned_ip})) # now launching full detection for ip in json.loads(scanned_ip): diff --git a/app/module_loader.py b/app/module_loader.py index e61caed..c8a0951 100644 --- a/app/module_loader.py +++ b/app/module_loader.py @@ -24,7 +24,7 @@ def load_db(): return db_instance -def run_nmap_detection(ip_range, db, ws, conn_mod_list): +def run_nmap_detection(ip_range, db, ws, list_mod_conn, dict_mod_monitoring): """ Instanciates the nmap_detection module from detection_modules, and runs the detection. :param ip_range: addresses to execute the nmap detection @@ -33,7 +33,7 @@ def run_nmap_detection(ip_range, db, ws, conn_mod_list): :return: a list containing the IP adresses checked """ nmap_mod = __import__("modules.detection_modules.nmap_detection", fromlist=modules.detection_modules) - nmap_mod_instance = getattr(nmap_mod, "nmap_detection")(db, ws, conn_mod_list) + nmap_mod_instance = getattr(nmap_mod, "nmap_detection")(db, ws, list_mod_conn, dict_mod_monitoring) return nmap_mod_instance.check_ip_range(ip_range) @@ -123,19 +123,21 @@ def run_one_monitoring_module(mod_name, os, conn, db, ws): ws.send(json.dumps({"40": cnfe.__str__})) -def get_info_mod_monitoring(os): +def get_info_mod_monitoring(): """ Get information about the output and block of the monitoring modules. These informations must be written by the module developper on the __init__.py file (add on info_mod dictionnary). - :param os: the os of the modules :return: a dictionary containing these informations on the form : - { + {'os:{ mod_name: {'block': val, 'unit': 'bool' or '%' or unit_name} + } } """ - __import__("modules.monitoring_modules." + os) - pack_mod_os = __import__("modules.monitoring_modules." + os, fromlist=modules.monitoring_modules.__all__) - return pack_mod_os.info_mod + info_mods = {} + for os in modules.monitoring_modules.__all__: + package = __import__("modules.monitoring_modules." + os, fromlist=modules.monitoring_modules.__all__) + info_mods[os] = package.info_mod + return info_mods def get_conection_modules_list(): diff --git a/app/modules/detection_modules/nmap_detection.py b/app/modules/detection_modules/nmap_detection.py index 7d77fb5..3b4b6ec 100644 --- a/app/modules/detection_modules/nmap_detection.py +++ b/app/modules/detection_modules/nmap_detection.py @@ -6,11 +6,12 @@ import json class nmap_detection: - def __init__(self, db, ws, conn_mod_list): + def __init__(self, db, ws, list_mod_conn, dict_mod_monitoring): self.db = db self.ws = ws self.scanned_ip = [] - self.conn_mod_list = conn_mod_list + self.list_mod_conn = list_mod_conn + self.dict_mod_monitoring = dict_mod_monitoring # function for splitting the different ranges of the IP adress # launch the nmap detection of each ip under this range @@ -135,13 +136,16 @@ class nmap_detection: state = port.getElementsByTagName('state')[0] service = port.getElementsByTagName('service')[0] if service.hasAttribute("ostype"): - dict_host['os'] = service.getAttribute("ostype") + if service.getAttribute("ostype").lower() == "linux": + dict_host['os'] = 'unix' + else: + dict_host['os'] = service.getAttribute("ostype").lower() if state.getAttribute('state') == 'open': dict_port['portid'] = port.getAttribute('portid') dict_port['portname'] = service.getAttribute('name') list_dict_port.append(dict_port) dict_host['openports'] = list_dict_port # the host have its IP for ID on the db - self.db.add_host(dict_host['addr'], json.dumps(dict_host), self.conn_mod_list) + self.db.add_host(dict_host['addr'], json.dumps(dict_host), self.list_mod_conn, self.dict_mod_monitoring) pexpect.run("rm -f res.xml") self.scanned_ip.append(ip) \ No newline at end of file diff --git a/app/modules/storage_modules/shelve_db.py b/app/modules/storage_modules/shelve_db.py index 00b1d88..5467a3e 100644 --- a/app/modules/storage_modules/shelve_db.py +++ b/app/modules/storage_modules/shelve_db.py @@ -27,7 +27,6 @@ class shelve_db: self.db["hosts"] = {} self.db["users"] = {} self.db["groups"] = {} - self.db["global_conf"] = {} except: print "Database initilalization error" else: @@ -43,7 +42,7 @@ class shelve_db: # Add and save a new host after its first nmap detection # It also preconfigure with the default configuration, add the host to the group "all" and # creates empty structures for the monitoring and archive data. - def add_host(self, addr_host, nmap_res, conn_mod_list): + def add_host(self, addr_host, nmap_res, list_mod_conn, dict_mod_info): """ Called by the nmap_detection module. Add and save a new host after its first nmap detection @@ -51,6 +50,10 @@ class shelve_db: creates empty structures for the monitoring and archive data. :param addr_host: the IP adress of the host to add :param nmap_res: a string containing the json reslult of the nmap detection of this host + :param list_mod_conn: a list containing the names of the different connection modules + (see get_conection_modules_list() on module_loader) + :param dict_mod_info: a dictionnary containing informations about the different monitoring modules + (see get_info_mod_monitoring() on module_loader) """ self.open_db() addr_host = str(addr_host) # Shelve doesn't support Unicode @@ -61,9 +64,10 @@ class shelve_db: self.db["hosts"][addr_host]["detected"]["nmap"] = nmap_res # Preconfiguration self.db["hosts"][addr_host]["conf"] = {} - self.db["hosts"][addr_host]["conf"]["monitoring"] = self.db["global_conf"] + self.db["hosts"][addr_host]["conf"]["monitoring"] = self.generate_global_conf(dict_mod_info, + json.loads(nmap_res)['os']) self.db["hosts"][addr_host]["conf"]["groups"] = ["all"] # Every host is in group "all" - self.db["hosts"][addr_host]["conf"]["connections"] = self.init_conn(json.loads(nmap_res), conn_mod_list) + self.db["hosts"][addr_host]["conf"]["connections"] = self.init_conn(json.loads(nmap_res), list_mod_conn) self.db["hosts"][addr_host]["conf"]["subscribers"] = {} # Add current user automatically ? self.db["hosts"][addr_host]["conf"]["custom_info"] = "" self.db["hosts"][addr_host]["conf"]["interventions"] = [] @@ -74,6 +78,40 @@ class shelve_db: finally: self.close_db() + def generate_global_conf(self, dict_mod_info, os): + """ + Configures automatically the monitoring for a host for each of the monitoring modules avaliable, in + function of the unit of the result of the monitoring module. + :param dict_mod_info: dictionary containing informations about all notification modules, in the form: + [monitoring_module_name][{'block':val, 'unit': val}] + :return a list containing the default parameters for each monitoring module + """ + res = {} + for mod in dict_mod_info[os]: + mod_conf = {} + mod_conf['block'] = dict_mod_info[os][mod]['block'] + mod_conf['activated'] = True + mod_conf['check_frequency'] = 60 + mod_conf['nb_minute'] = 30 + mod_conf['nb_hour'] = 12 + mod_conf['nb_day'] = 15 + mod_conf['nb_week'] = 2 + mod_conf['nb_month'] = 6 + mod_conf['nb_year'] = None + unit = dict_mod_info[os][mod]['unit'] + mod_conf['unit'] = unit + if unit == '%': + mod_conf['minor_limit'] = 95 + mod_conf['major_limit'] = 100 + elif unit == 'bool': + mod_conf['minor_limit'] = True + mod_conf['major_limit'] = False + else: + mod_conf['minor_limit'] = 8 + mod_conf['major_limit'] = 10 + res[mod] = mod_conf + return res + def init_conn(self, dict_nmap_res, conn_list): """ Returns an initialization for the connection configuration on a host. @@ -275,43 +313,6 @@ class shelve_db: stats['M2'] += stats['delta'] * (val - stats['mean']) return stats - def create_global_conf(self, dict_mod_info): - """ - Create an entry on the global_conf for each new monitoring module. - :param dict_mod_info: dictionary containing informations about all notification modules, by os, in the form: - [os_name][monitoring_module_name][{'block':val, 'unit': val}] - """ - self.open_db() - try: - for os in dict_mod_info: - if os not in self.db['global_conf']: - self.db['global_conf'][os] = {} - for mod in dict_mod_info[os]: - if mod not in self.db['global_conf'][os]: - self.db['global_conf'][os][mod] = {} - self.db['global_conf'][os][mod]['block'] = dict_mod_info[os][mod]['block'] - self.db['global_conf'][os][mod]['activated'] = True - self.db['global_conf'][os][mod]['check_frequency'] = 3600 - self.db['global_conf'][os][mod]['nb_minute'] = 30 - self.db['global_conf'][os][mod]['nb_hour'] = 12 - self.db['global_conf'][os][mod]['nb_day'] = 15 - self.db['global_conf'][os][mod]['nb_week'] = 2 - self.db['global_conf'][os][mod]['nb_month'] = 6 - self.db['global_conf'][os][mod]['nb_year'] = None - unit = dict_mod_info[os][mod]['unit'] - self.db['global_conf'][os][mod]['unit'] = unit - if unit == '%': - self.db['global_conf'][os][mod]['minor_limit'] = 95 - self.db['global_conf'][os][mod]['major_limit'] = 100 - elif unit == 'bool': - self.db['global_conf'][os][mod]['minor_limit'] = True - self.db['global_conf'][os][mod]['major_limit'] = False - else: - self.db['global_conf'][os][mod]['minor_limit'] = 8 - self.db['global_conf'][os][mod]['major_limit'] = 10 - finally: - self.close_db() - def add_host_list_to_group(self, host_list, group): """ Add given hosts to a group. If the group doesn't exists on the database, it will be created. diff --git a/static/js/controllers/mainCtrl.js b/static/js/controllers/mainCtrl.js index dc7c4f2..f24a3fe 100644 --- a/static/js/controllers/mainCtrl.js +++ b/static/js/controllers/mainCtrl.js @@ -11,7 +11,7 @@ mumApp.config(function($routeProvider){ .when('/groups',{ templateUrl : 'groups.html', }) - .when('/hostpage',{ + .when('/hostpage/:param',{ templateUrl : 'hostpage.html', }) .when('/notifications',{ @@ -22,6 +22,7 @@ mumApp.config(function($routeProvider){ }) .when('/scan',{ templateUrl : 'scan.html', + controller : 'mainController' }) .when('/settings',{ templateUrl : 'settings.html', @@ -35,11 +36,18 @@ mumApp.config(function($routeProvider){ .when('/users',{ templateUrl : 'users.html', }) + .otherwise({ + redirectTo: '/' + }); }); -mumApp.controller('mainController', ['$scope', 'toastr', '$interval', '$filter', function($scope, toastr, $interval, $filter) { +mumApp.controller('mainController', ['$scope', 'toastr', '$interval', '$filter', '$routeParams', + function($scope, toastr, $interval, $filter, $routeParams) { // init + $scope.master = {}; + $scope.param = $routeParams.param; + $scope.sort = { sortingOrder : 'id', reverse : false @@ -72,10 +80,6 @@ mumApp.controller('mainController', ['$scope', 'toastr', '$interval', '$filter', $scope.scan_is_over = false; // pour afficher ou non certaines parties de la page $scope.ip_scanned = {}; - $scope.post_val = function(){ //lace la detection apres remplissage du champ et validation du formulaire - var request = '{"10" : "' + $scope.ip_range + '"}'; - ws.send(request); - } // Concerning WebSocket var ws = new WebSocket("ws://0.0.0.0:1337/websocket"); @@ -146,6 +150,10 @@ mumApp.controller('mainController', ['$scope', 'toastr', '$interval', '$filter', toastr.error(msg, title); }; + $scope.post_val = function(){ //lace la detection apres remplissage du champ et validation du formulaire + var request = '{"10" : "' + $scope.ip_range + '"}'; + ws.send(request); + } // Concerning the table manipulation var searchMatch = function (haystack, needle) { diff --git a/views/dashboard.html b/views/dashboard.html index d8fafa9..c7e739b 100644 --- a/views/dashboard.html +++ b/views/dashboard.html @@ -72,7 +72,7 @@ orderBy:sort.sortingOrder:sort.reverse | filter:{addr:addr_filter, name:name_filter, status:status_filter, group:{name:group_filter}}" class={{item.status}}> - <td><a href="hostpage.html">{{item.addr}}</a></td> + <td><a href="#/hostpage/{{item.addr}}">{{item.addr}}</a></td> <td>{{item.name}}</td> <td>{{item.status}}</td> <td>{{getGroupsByAddr(item.addr)}}</td> diff --git a/views/hostpage.html b/views/hostpage.html index 060f678..fd9bd28 100644 --- a/views/hostpage.html +++ b/views/hostpage.html @@ -1,6 +1,6 @@ <div class="col-md-offset-2 main"> - <h1 class="page-header">Current state of 192.168.74.1 <small>www.example.com</small></h1> + <h1 class="page-header">Current state of {{param}} <small>www.example.com</small></h1> <button type="button" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#modal_block">Activate/Deactivate</button> <button type="button" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#modal_conn">Connection settings</button> <button type="button" class="btn btn-info btn-xs">Launch a new detection</button> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository mum. See http://git.chorem.org/mum.git commit b52c260056c477b1d44043c76b3e5efc2b938dbc Author: Alexis Guilbaud <guilbaud@codelutin.com> Date: Tue Feb 24 17:02:26 2015 +0100 test monitoring sur localhost : OK --- app/app.py | 2 ++ app/modules/monitoring_modules/unix/disk.py | 3 +- app/modules/monitoring_modules/unix/memory.py | 4 +-- .../monitoring_modules/unix/updated_packages.py | 8 ++--- app/modules/storage_modules/shelve_db.py | 39 ++++++++++++++++------ static/js/controllers/mainCtrl.js | 10 ++++++ 6 files changed, 46 insertions(+), 20 deletions(-) diff --git a/app/app.py b/app/app.py index 4a07abf..4fb4db3 100755 --- a/app/app.py +++ b/app/app.py @@ -44,6 +44,8 @@ class ThreadDetect(threading.Thread): for ip in json.loads(scanned_ip): conn = module_loader.load_conn("ssh", ip, "aguilbaud", "/home/aguilbaud/.ssh/id_rsa") module_loader.run_all_detection_modules(db.get_host_os(ip), conn, db, self.ws) + module_loader.run_all_monitoring_modules("unix", conn, db, self.ws) + print "done" @route('/') diff --git a/app/modules/monitoring_modules/unix/disk.py b/app/modules/monitoring_modules/unix/disk.py index 4e7ac7d..c6f3d28 100644 --- a/app/modules/monitoring_modules/unix/disk.py +++ b/app/modules/monitoring_modules/unix/disk.py @@ -1,6 +1,5 @@ __author__ = 'aguilbaud' -import json import re """ @@ -32,5 +31,5 @@ class disk: "disk", self.conn.get_addr_host() ) raise exception_inst - res_check = json.dumps({"disk": int(disk_used)}) + res_check = int(disk_used) self.db.add_check(self.conn.get_addr_host(), "disk", res_check) \ No newline at end of file diff --git a/app/modules/monitoring_modules/unix/memory.py b/app/modules/monitoring_modules/unix/memory.py index adc30d4..1c2f146 100644 --- a/app/modules/monitoring_modules/unix/memory.py +++ b/app/modules/monitoring_modules/unix/memory.py @@ -1,5 +1,5 @@ __author__ = 'aguilbaud' -import json + import re @@ -31,5 +31,5 @@ class memory: "memory", self.conn.get_addr_host() ) raise exception_inst - res_check = json.dumps({"memory": memused * 100 / int(memtotal)}) + res_check = memused * 100 / int(memtotal) self.db.add_check(self.conn.get_addr_host(), "memory", res_check) \ No newline at end of file diff --git a/app/modules/monitoring_modules/unix/updated_packages.py b/app/modules/monitoring_modules/unix/updated_packages.py index a0642fc..6e66832 100644 --- a/app/modules/monitoring_modules/unix/updated_packages.py +++ b/app/modules/monitoring_modules/unix/updated_packages.py @@ -1,9 +1,7 @@ __author__ = 'alexis' -import json - class updated_packages: - def __init__(self, conn, db): + def __init__(self, conn, db, mnce): self.conn = conn self.db = db @@ -12,7 +10,7 @@ class updated_packages: stdout = self.conn.exec_command(cmd) tab_res = stdout.split(':') if len(tab_res) == 2: - res_check = json.dumps({'non_updated_packages': False}) + res_check = False else: - res_check = json.dumps({'non_updated_packages': True}) + res_check = True self.db.add_check(self.conn.get_addr_host(), "updated_packages", res_check) \ No newline at end of file diff --git a/app/modules/storage_modules/shelve_db.py b/app/modules/storage_modules/shelve_db.py index 5467a3e..1a1ebea 100644 --- a/app/modules/storage_modules/shelve_db.py +++ b/app/modules/storage_modules/shelve_db.py @@ -73,6 +73,8 @@ class shelve_db: self.db["hosts"][addr_host]["conf"]["interventions"] = [] # Create structure for monitoring data self.db["hosts"][addr_host]["monitoring"] = {} + # Create structure for global status of host + self.db["hosts"][addr_host]["status"] = {} # Create structure for archiving data self.db["hosts"][addr_host]["archive"] = {} finally: @@ -119,18 +121,16 @@ class shelve_db: :param conn_list: A list of all connection modules avaliable :return: """ - res = [] + dict_conn = {} cpt = 1 for port in dict_nmap_res['openports']: if port["portname"] in conn_list: - dict_conn = {} dict_conn[port["portname"]] = { "priority": cpt, "portid": int(port["portid"]), } - res.append(dict_conn) cpt += 1 - return res + return dict_conn def get_hosts(self): """ @@ -170,15 +170,15 @@ class shelve_db: info_host = {} info_host["addr"] = detected["addr"] info_host["name"] = detected["hostname"] - if "status" in self.db["hosts"][host]["monitoring"]: - info_host["status"] = self.db["hosts"][host]["monitoring"]["status"] + if "status" in self.db["hosts"][host]["status"]: + info_host["status"] = self.db["hosts"][host]["status"]["state"] else: info_host["status"] = "" info_host["group"] = [] for group in self.db["hosts"][host]["conf"]["groups"]: info_host["group"].append({"name": group}) - if "date" in self.db["hosts"][host]["monitoring"]: - info_host["last_check"] = self.db["hosts"][host]["monitoring"]["date"] + if "date" in self.db["hosts"][host]["status"]: + info_host["last_check"] = self.db["hosts"][host]["status"]["date"] else: info_host["last_check"] = 0 res.append(info_host) @@ -275,20 +275,37 @@ class shelve_db: :param val: the value observed """ self.open_db() - new_val = {"date": datetime.now()} + new_val = {"date": datetime.now(), "value" : val} try: - if val >= self.db['hosts']['conf']['monitorig'][mod_name]['minor_limit']: + if val >= self.db['hosts'][addr_host]['conf']['monitoring'][mod_name]['minor_limit']: new_val['state'] = 'warning' - elif val >= self.db['hosts']['conf']['monitorig'][mod_name]['major_limit']: + elif val >= self.db['hosts'][addr_host]['conf']['monitoring'][mod_name]['major_limit']: new_val['state'] = 'danger' else: new_val['state'] = 'success' + if mod_name not in self.db['hosts'][addr_host]["monitoring"]: + self.db['hosts'][addr_host]["monitoring"][mod_name] = {} previous_val = self.db['hosts'][addr_host]["monitoring"][mod_name] self.db['hosts'][addr_host]['monitoring'][mod_name] = new_val + # updating the global state of the host + self.db['hosts'][addr_host]['status']['date'] = new_val['date'] + if 'state' not in self.db['hosts'][addr_host]['status']: + self.db['hosts'][addr_host]['status']['state'] = new_val['state'] + else: + state = 'success' + for mod_name in self.db['hosts'][addr_host]['monitoring']: + if self.db['hosts'][addr_host]['monitoring'][mod_name]['state'] == 'danger': + state = 'danger' + elif self.db['hosts'][addr_host]['monitoring'][mod_name]['state'] == 'warning' \ + and not state == 'danger': + state = 'warning' + self.db['hosts'][addr_host]['status']['state'] = state # now performing archiving + """ if mod_name in self.db['hosts'][addr_host]['archive']: self.db['hosts'][addr_host]['archive'][mod_name] = \ self.update_stats(self.db['hosts'][addr_host]['archive'][mod_name], val) + """ finally: self.close_db() diff --git a/static/js/controllers/mainCtrl.js b/static/js/controllers/mainCtrl.js index f24a3fe..6762f89 100644 --- a/static/js/controllers/mainCtrl.js +++ b/static/js/controllers/mainCtrl.js @@ -4,21 +4,27 @@ mumApp.config(function($routeProvider){ $routeProvider .when('/',{ templateUrl : 'dashboard.html', + controller : 'mainController' }) .when('/dashboard',{ templateUrl : 'dashboard.html', + controller : 'mainController' }) .when('/groups',{ templateUrl : 'groups.html', + controller : 'mainController' }) .when('/hostpage/:param',{ templateUrl : 'hostpage.html', + controller : 'mainController' }) .when('/notifications',{ templateUrl : 'notifications.html', + controller : 'mainController' }) .when('/profile',{ templateUrl : 'profile.html', + controller : 'mainController' }) .when('/scan',{ templateUrl : 'scan.html', @@ -26,15 +32,19 @@ mumApp.config(function($routeProvider){ }) .when('/settings',{ templateUrl : 'settings.html', + controller : 'mainController' }) .when('/signin',{ templateUrl : 'signin.html', + controller : 'mainController' }) .when('/stats',{ templateUrl : 'stats.html', + controller : 'mainController' }) .when('/users',{ templateUrl : 'users.html', + controller : 'mainController' }) .otherwise({ redirectTo: '/' -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository mum. See http://git.chorem.org/mum.git commit 327132ff3d2306fcb65a3adf3f988a540b1b4a25 Author: Alexis Guilbaud <guilbaud@codelutin.com> Date: Tue Feb 24 17:06:10 2015 +0100 règle .gitignore pour les .pyc ajoutée --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ef12ce2..3e1bfa5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ node_modules .idea res.xml mum.db -*.pyc \ No newline at end of file +*/pyc +/*.pyc +*/*.pyc \ No newline at end of file -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm