Exemplo n.º 1
0
 def test_column_label_containing_at_sign(self):
     export_with_column_containing_at_sign = ExportInstance(
         is_odata_config=True,
         tables=[
             TableConfiguration(columns=[
                 ExportColumn(
                     label='@label',
                     item=ExportItem(path=[PathNode(name='val')]),
                     selected=True,
                 )
             ])
         ])
     export_with_column_containing_at_sign.save()
     self.addCleanup(export_with_column_containing_at_sign.delete)
     cleaned_export = ExportInstance.get(
         export_with_column_containing_at_sign.get_id)
     self.assertEqual(cleaned_export.tables[0].columns[0].label, 'label')
Exemplo n.º 2
0
 def test_row_number_column_is_removed(self):
     export_with_row_number_column = ExportInstance(
         is_odata_config=True,
         tables=[
             TableConfiguration(columns=[
                 RowNumberColumn(label='row-number', ),
                 ExportColumn(
                     label='label',
                     item=ExportItem(path=[PathNode(name='val')]),
                     selected=True,
                 )
             ])
         ])
     export_with_row_number_column.save()
     self.addCleanup(export_with_row_number_column.delete)
     cleaned_export = ExportInstance.get(
         export_with_row_number_column.get_id)
     tables = cleaned_export.tables
     self.assertEqual(len(tables), 1)
     columns = tables[0].columns
     self.assertEqual(len(columns), 1)
     self.assertFalse(isinstance(columns[0], RowNumberColumn))
     self.assertEqual(columns[0].label, 'label')
Exemplo n.º 3
0
def record_feed_access_in_datadog(request, config_id, duration, response):
    config = ExportInstance.get(config_id)
    username = request.couch_user.username
    json_response = json.loads(response.content.decode('utf-8'))
    rows = json_response['value']
    row_count = len(rows)
    try:
        column_count = len(rows[0])
    except IndexError:
        column_count = 0
    metrics_histogram(
        'commcare.odata_feed.test_v3', duration,
        bucket_tag='duration_bucket', buckets=(1, 5, 20, 60, 120, 300, 600), bucket_unit='s',
        tags={
            'domain': request.domain,
            'feed_id': config_id,
            'feed_type': config.type,
            'username': username,
            'row_count': row_count,
            'column_count': column_count,
            'size': len(response.content)
        }
    )
Exemplo n.º 4
0
def record_feed_access_in_datadog(request, config_id, duration, response):
    config = ExportInstance.get(config_id)
    username = request.couch_user.username
    json_response = json.loads(response.content.decode('utf-8'))
    rows = json_response['value']
    row_count = len(rows)
    try:
        column_count = len(rows[0])
    except IndexError:
        column_count = 0
    datadog_counter('commcare.odata_feed.test_v3',
                    tags=[
                        'domain:{}'.format(request.domain),
                        'feed_id:{}'.format(config_id),
                        'feed_type:{}'.format(config.type),
                        'username:{}'.format(username),
                        'row_count:{}'.format(row_count),
                        'column_count:{}'.format(column_count),
                        'size:{}'.format(len(response.content)),
                        'duration:{}'.format(duration),
                        'duration_bucket:{}'.format(
                            bucket_value(duration,
                                         (1, 5, 20, 60, 120, 300, 600), 's')),
                    ])
Exemplo n.º 5
0
 def export_type(self):
     return ExportInstance.get(self.export_id).type
Exemplo n.º 6
0
    def handle(self, domain, **options):
        db = ExportInstance.get_db()
        exports = db.view(
            'export_instances_by_domain/view',
            startkey=[domain],
            endkey=[domain, {}],
            include_docs=False,
            reduce=False,
        ).all()
        if not exports:
            print("No exports to delete here, exiting.")
            return

        if options['days_inactive'] > 0:
            import datetime
            inactive_since = datetime.datetime.today() - datetime.timedelta(days=int(options['days_inactive']))
            inactive_exports = []
            for export in exports:
                e = ExportInstance.get(export['id'])
                if e.last_accessed and e.last_accessed <= inactive_since:
                    inactive_exports.append(export)
            if not inactive_exports:
                print("No exports have been inactive for more than {days_inactive} days, exiting.".format(
                    days_inactive=options['days_inactive'])
                )
                return
            confirm = input(
                "There are {total_exports} exports in {domain}. Are you sure you want to delete "
                "{total_inactive_exports} that are older than {days_inactive} days [y/N]?".format(
                    total_exports=len(exports),
                    total_inactive_exports=len(inactive_exports),
                    domain=domain,
                    days_inactive=int(options['days_inactive'])
                )
            )
            if confirm.lower() == 'y':
                exports = inactive_exports
            else:
                return

        filter_exports = lambda _type: [row for row in exports if _type in row['key']]
        form_exports = filter_exports('FormExportInstance')
        case_exports = filter_exports('CaseExportInstance')

        confirm = input(
            "There are {f_count} form exports, and {c_count} case exports. "
            "Are you sure you want to delete all these exports [y/N]?\n".format(
                f_count=len(form_exports),
                c_count=len(case_exports)
            )
        )
        to_delete = []
        if confirm.lower() == 'y':
            _type = input(
                "Enter 'case' to delete all case exports, "
                "'form to delete all form exports, "
                "'all' to delete both form and case exports. "
                "Enter anything else to exit.\n"
            )
            if _type == 'form':
                to_delete = form_exports
                print("Deleting form exports")
            elif _type == 'case':
                to_delete = case_exports
                print("Deleting case exports")
            elif _type == 'all':
                to_delete = form_exports + case_exports
                print("Deleting all exports")
            else:
                print("Not deleting anything, exiting!")
                return
            total_count = iter_bulk_delete(db, [doc['id'] for doc in to_delete])
            print("Deleted total of {} exports succesfully!".format(total_count))