예제 #1
0
def monitoring_update_conf(request, conf_name):
    """
    Update configuration file for given conf, values presently are:
    importer or scraper
    """
    if request.user.is_authenticated:
        mdl = MonitorDataLoader()
        result = ''
        conf_data = json.loads(request.body)

        if conf_name == 'scraper':
            result = mdl.overwrite_scraper_config(conf_data)
        else:
            result = mdl.overwrite_importer_config(conf_data)

        result_json = json.dumps(result)
        if 'error' in result_json:
            return HttpResponseServerError(
                result_json,
                mimetype='application/json'
            )
        else:
            return HttpResponse(result_json, mimetype='application/json')
    else:
        return Http404
예제 #2
0
def monitoring(request, *args, **kwargs):
    """
    monitor view method - this renders the monitor app page and adds all
    bootstrap variables required - this is used at /corroborator/monitor
     handle formatting of lists outside the view function
    """
    if request.user.is_authenticated():
        username = request.user.username
        userid = request.user.id

        #api details
        user = User.objects.get(username=username)
        api = ApiKey.objects.get(user=user)

        mdl = MonitorDataLoader()
        importer_conf_data = json.dumps(mdl.importer_config)
        scraper_conf_data = json.dumps(mdl.scraper_config)
        importer_stats_data = json.dumps(mdl.importer_stats)

        return render(
            request, 'monitoring.html', {
                'locale': translation.get_language(),
                'importer_conf_data': importer_conf_data,
                'scraper_conf_data': scraper_conf_data,
                'importer_stats_data': importer_stats_data,
                'username': username,
                'userid': userid,
                'api_key': api.key,
                'is_analyst': is_in_group(user, 'data-analyst'),
                'is_senior_analyst': is_in_group(user, 'senior-data-analyst'),
                'is_chief_analyst': is_in_group(user, 'chief-data-analyst'),
            })
    else:
        return render_to_response('auth.html', RequestContext(request))
예제 #3
0
def monitoring_update_conf(request, conf_name):
    """
    Update configuration file for given conf, values presently are:
    importer or scraper
    """
    if request.user.is_authenticated:
        mdl = MonitorDataLoader()
        result = ''
        conf_data = json.loads(request.body)

        if conf_name == 'scraper':
            result = mdl.overwrite_scraper_config(conf_data)
        else:
            result = mdl.overwrite_importer_config(conf_data)

        result_json = json.dumps(result)
        if 'error' in result_json:
            return HttpResponseServerError(result_json,
                                           mimetype='application/json')
        else:
            return HttpResponse(result_json, mimetype='application/json')
    else:
        return Http404
 def setUp(self):
     """
     Setup initial tools
     """
     self.mdl = MonitorDataLoader()
class MonitorDataLoaderTestCase(TestCase):

    def setUp(self):
        """
        Setup initial tools
        """
        self.mdl = MonitorDataLoader()

    def test_overwrite_importer_config_api(self):
        """
        Test that the importer config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/", #actors_csv/",
            "bulletins_dir": "/tmp/", #bulletins_csv",
            "mysql_dir": "/tmp/", #mysql/",
            "media_params": {
                "media_dir": "/tmp/", #media/",
                "file_meta_type": ".yaml",
                "file_types": {
                    "image": [
                        "test",
                        "png",
                        "gif"
                    ],
                    "video": [
                        "mp4"
                    ]
                }
            },
        }
        result = self.mdl.overwrite_importer_config(data)
        print result
        test_result = result['result']
        self.assertEqual(test_result,'success') 

    def test_overwrite_scraper_config_api(self):
        """
        Test that the scraper config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/", #actors_csv/",
            "bulletins_dir": "/tmp/", #bulletins_csv/",
            "scrapers": [{
                "vdc": False,
                "csrsy": False,
                "documents-sy": False,
                "syrianshuhada": False
            }]
        }
        client = Client()
        url = '/corroborator/monitoring/update/scraper/'
        response = client.post(
            url,
            json.dumps(data),
            content_type='application/json'
        )
        
        self.assertEqual(response.status_code,200) 

    def test_overwrite_importer_config(self):
        """
        Test that the importer config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/", #actors_csv/",
            "bulletins_dir": "/tmp/", #bulletins_csv",
            "mysql_dir": "/tmp/", #mysql/",
            "media_params": {
                "media_dir": "/tmp/", #media/",
                "file_meta_type": ".yml",
                "file_types": {
                    "image": [
                        "test",
                        "png",
                        "gif"
                    ],
                    "video": [
                        "mp4"
                    ]
                }
            },
        }
        client = Client()
        url = '/corroborator/monitoring/update/importer/'
        response = client.post(
            url,
            json.dumps(data),
            content_type='application/json'
        )
        
        self.assertEqual(response.status_code,200) 

    def test_overwrite_scraper_config(self):
        """
        Test that the scraper config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/", #actors_csv/",
            "bulletins_dir": "/tmp/", #bulletins_csv/",
            "scrapers": [{
                "vdc": False,
                "csrsy": False,
                "documents-sy": False,
                "syrianshuhada": False
            }]
        }
        result = self.mdl.overwrite_scraper_config(data)
        self.assertEqual(result['result'],'success') 

    def test_read_scraper_config(self):
        """
        Test that the scraper config is correctly read
        """
        scraper_conf = self.mdl.get_scraper_config()
        self.assertEqual(
            scraper_conf['_HEADER']['modified'],
            '2013/10/10'
        ) 

    def test_missing_fields(self):
        """
        Test error message for missing fields
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/", #actors_csv/",
            "bulletins_dir": "/tmp/", #bulletins_csv",
            "mysql_dir": "/tmp/", #mysql/",
            "media_params": {
                "media_dir": "/tmp/", #media/",
                "file_meta_type": ".yaml",
                "file_types": {
                    "image": [
                        "test",
                        "png",
                        "gif"
                    ],
                    "video": [
                        "mp4"
                    ]
                }
            },
        }
        mysql_missing = dict(data)
        del mysql_missing['mysql_dir']
        result = self.mdl.overwrite_importer_config(mysql_missing)
        self.assertEqual(result['error'], 'MySQL Directory missing')

        actor_dir_wrong = dict(data)
        actor_dir_wrong['actors_dir'] = 'not real dir'
        result = self.mdl.overwrite_importer_config(actor_dir_wrong)
        self.assertEqual(result['error'], 'not real dir is not a valid system directory')

        del actor_dir_wrong['actors_dir']
        result = self.mdl.overwrite_importer_config(actor_dir_wrong)
        self.assertEqual(result['error'], 'Actors Directory missing')


        bulletin_dir_wrong = dict(data)
        bulletin_dir_wrong['bulletins_dir'] = 'not real dir'
        result = self.mdl.overwrite_importer_config(
            bulletin_dir_wrong
        )
        self.assertEqual(result['error'], 'not real dir is not a valid system directory')

        del bulletin_dir_wrong['bulletins_dir']
        result = self.mdl.overwrite_importer_config(bulletin_dir_wrong)
        self.assertEqual(result['error'], 'Bulletins Directory missing')
        media_params = dict(data)
        media_params['media_params']['media_dir'] = 'not real dir'
        result = self.mdl.overwrite_importer_config(media_params)
        self.assertEqual(result['error'], 'not real dir is not a valid system directory')

        media_params['media_params']['media_dir'] = '/tmp/' #media/'
        media_params['media_params']['file_meta_type'] = '_#4eld0'
        result = self.mdl.overwrite_importer_config(media_params)
        self.assertEqual(result['error'], '_#4eld0 does not match required file extension format. eg: .yaml')

        media_params['media_params']['file_meta_type'] = '.yaml'
        media_params['media_params']['file_types']['image'].append(
            '_#4eld0'
        )
        result = self.mdl.overwrite_importer_config(media_params)
        self.assertEqual(
            result['error'], 
            '_#4eld0 does not match required file extension format. eg: jpg'
        )


    def test_validate_ext(self):
        """
        Test file extenson validation check
        """
        test_file_ext = '.yaml'
        result = self.mdl.validate_ext(test_file_ext)
        self.assertEqual(result['success'], 'true')

    def test_read_importer_config(self):
        """
        Test that the importer config can be correctly read
        """
        importer_conf = self.mdl.get_importer_config()
        self.assertEqual(
            importer_conf['_HEADER']['modified'],
            '2013/10/10'
        )
    def test_read_importer_stats(self):
        """
        Test reading of the importer stats
        """
        importer_stats = self.mdl.get_importer_stats()
예제 #6
0
 def setUp(self):
     """
     Setup initial tools
     """
     self.mdl = MonitorDataLoader()
예제 #7
0
class MonitorDataLoaderTestCase(TestCase):
    def setUp(self):
        """
        Setup initial tools
        """
        self.mdl = MonitorDataLoader()

    def test_overwrite_importer_config_api(self):
        """
        Test that the importer config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/actors_csv/",
            "bulletins_dir": "/tmp/bulletins_csv",
            "mysql_dir": "/tmp/mysql/",
            "media_params": {
                "media_dir": "/tmp/media/",
                "file_meta_type": ".yaml",
                "file_types": {
                    "image": ["test", "png", "gif"],
                    "video": ["mp4"]
                }
            },
        }
        result = self.mdl.overwrite_importer_config(data)
        test_result = result['result']
        self.assertEqual(test_result, 'success')

    def test_overwrite_scraper_config_api(self):
        """
        Test that the scraper config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir":
            "/tmp/actors_csv/",
            "bulletins_dir":
            "/tmp/bulletins_csv/",
            "scrapers": [{
                "vdc": False,
                "csrsy": False,
                "documents-sy": False,
                "syrianshuhada": False
            }]
        }
        client = Client()
        url = '/corroborator/monitoring/update/scraper/'
        response = client.post(url,
                               json.dumps(data),
                               content_type='application/json')

        self.assertEqual(response.status_code, 200)

    def test_overwrite_importer_config(self):
        """
        Test that the importer config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/actors_csv/",
            "bulletins_dir": "/tmp/bulletins_csv",
            "mysql_dir": "/tmp/mysql/",
            "media_params": {
                "media_dir": "/tmp/media/",
                "file_meta_type": ".yml",
                "file_types": {
                    "image": ["test", "png", "gif"],
                    "video": ["mp4"]
                }
            },
        }
        client = Client()
        url = '/corroborator/monitoring/update/importer/'
        response = client.post(url,
                               json.dumps(data),
                               content_type='application/json')

        self.assertEqual(response.status_code, 200)

    def test_overwrite_scraper_config(self):
        """
        Test that the scraper config is correctly written
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir":
            "/tmp/actors_csv/",
            "bulletins_dir":
            "/tmp/bulletins_csv/",
            "scrapers": [{
                "vdc": False,
                "csrsy": False,
                "documents-sy": False,
                "syrianshuhada": False
            }]
        }
        result = self.mdl.overwrite_scraper_config(data)
        self.assertEqual(result['result'], 'success')

    def test_read_scraper_config(self):
        """
        Test that the scraper config is correctly read
        """
        scraper_conf = self.mdl.get_scraper_config()
        self.assertEqual(scraper_conf['_HEADER']['modified'], '2013/10/10')

    def test_missing_fields(self):
        """
        Test error message for missing fields
        """
        data = {
            "_HEADER": {
                "modified": "2013/10/10",
                "author": "Bill Doran"
            },
            "actors_dir": "/tmp/actors_csv/",
            "bulletins_dir": "/tmp/bulletins_csv",
            "mysql_dir": "/tmp/mysql/",
            "media_params": {
                "media_dir": "/tmp/media/",
                "file_meta_type": ".yaml",
                "file_types": {
                    "image": ["test", "png", "gif"],
                    "video": ["mp4"]
                }
            },
        }
        mysql_missing = dict(data)
        del mysql_missing['mysql_dir']
        result = self.mdl.overwrite_importer_config(mysql_missing)
        self.assertEqual(result['error'], 'MySQL Directory missing')

        actor_dir_wrong = dict(data)
        actor_dir_wrong['actors_dir'] = 'not real dir'
        result = self.mdl.overwrite_importer_config(actor_dir_wrong)
        self.assertEqual(result['error'],
                         'not real dir is not a valid system directory')

        del actor_dir_wrong['actors_dir']
        result = self.mdl.overwrite_importer_config(actor_dir_wrong)
        self.assertEqual(result['error'], 'Actors Directory missing')

        bulletin_dir_wrong = dict(data)
        bulletin_dir_wrong['bulletins_dir'] = 'not real dir'
        result = self.mdl.overwrite_importer_config(bulletin_dir_wrong)
        self.assertEqual(result['error'],
                         'not real dir is not a valid system directory')

        del bulletin_dir_wrong['bulletins_dir']
        result = self.mdl.overwrite_importer_config(bulletin_dir_wrong)
        self.assertEqual(result['error'], 'Bulletins Directory missing')
        media_params = dict(data)
        media_params['media_params']['media_dir'] = 'not real dir'
        result = self.mdl.overwrite_importer_config(media_params)
        self.assertEqual(result['error'],
                         'not real dir is not a valid system directory')

        media_params['media_params']['media_dir'] = '/tmp/media/'
        media_params['media_params']['file_meta_type'] = '_#4eld0'
        result = self.mdl.overwrite_importer_config(media_params)
        self.assertEqual(
            result['error'],
            '_#4eld0 does not match required file extension format. eg: .yaml')

        media_params['media_params']['file_meta_type'] = '.yaml'
        media_params['media_params']['file_types']['image'].append('_#4eld0')
        result = self.mdl.overwrite_importer_config(media_params)
        self.assertEqual(
            result['error'],
            '_#4eld0 does not match required file extension format. eg: jpg')

    def test_validate_ext(self):
        """
        Test file extenson validation check
        """
        test_file_ext = '.yaml'
        result = self.mdl.validate_ext(test_file_ext)
        self.assertEqual(result['success'], 'true')

    def test_read_importer_config(self):
        """
        Test that the importer config can be correctly read
        """
        importer_conf = self.mdl.get_importer_config()
        self.assertEqual(importer_conf['_HEADER']['modified'], '2013/10/10')

    def test_read_importer_stats(self):
        """
        Test reading of the importer stats
        """
        importer_stats = self.mdl.get_importer_stats()
        self.assertEqual(importer_stats['_HEADER']['modified'], '2013/10/10')