summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Bcfg2/Reporting/migrate.py230
-rw-r--r--src/lib/Bcfg2/Server/Admin/Reports.py1
2 files changed, 0 insertions, 231 deletions
diff --git a/src/lib/Bcfg2/Reporting/migrate.py b/src/lib/Bcfg2/Reporting/migrate.py
deleted file mode 100644
index d0b3c9dc4..000000000
--- a/src/lib/Bcfg2/Reporting/migrate.py
+++ /dev/null
@@ -1,230 +0,0 @@
-import logging
-import Bcfg2.Logger
-from django.core.cache import cache
-from django.db import connection, transaction, backend
-
-from Bcfg2.Reporting import models as new_models
-from Bcfg2.Server.Reports.reports import models as legacy_models
-
-logger = logging.getLogger(__name__)
-
-_our_backend = None
-
-def _quote(value):
- """
- Quote a string to use as a table name or column
-
- Newer versions and various drivers require an argument
- https://code.djangoproject.com/ticket/13630
- """
- global _our_backend
- if not _our_backend:
- try:
- _our_backend = backend.DatabaseOperations(connection)
- except TypeError:
- _our_backend = backend.DatabaseOperations(connection)
- return _our_backend.quote_name(value)
-
-
-@transaction.commit_on_success
-def _migrate_transaction(inter, entries):
- """helper"""
-
- logger.debug("Migrating interaction %s for %s" %
- (inter.id, inter.client.name))
-
- newint = new_models.Interaction(id=inter.id,
- client_id=inter.client_id,
- timestamp=inter.timestamp,
- state=inter.state,
- repo_rev_code=inter.repo_rev_code,
- server=inter.server,
- good_count=inter.goodcount,
- total_count=inter.totalcount,
- bad_count=inter.bad_entries,
- modified_count=inter.modified_entries,
- extra_count=inter.extra_entries)
-
- try:
- newint.profile_id = inter.metadata.profile.id
- groups = [grp.pk for grp in inter.metadata.groups.all()]
- bundles = [bun.pk for bun in inter.metadata.bundles.all()]
- except legacy_models.InteractionMetadata.DoesNotExist:
- groups = []
- bundles = []
- unkown_profile = cache.get("PROFILE_UNKNOWN")
- if not unkown_profile:
- unkown_profile, created = new_models.Group.objects.get_or_create(name="<<Unknown>>")
- cache.set("PROFILE_UNKNOWN", unkown_profile)
- newint.profile = unkown_profile
- newint.save()
- if bundles:
- newint.bundles.add(*bundles)
- if groups:
- newint.groups.add(*groups)
-
- updates = dict(paths=[], packages=[], actions=[], services=[])
- for ei in legacy_models.Entries_interactions.objects.select_related('reason')\
- .filter(interaction=inter):
- ent = entries[ei.entry_id]
- name = ent.name
- act_dict = dict(name=name, exists=ei.reason.current_exists,
- state=ei.type)
-
- if ent.kind == 'Action':
- act_dict['status'] = ei.reason.status
- if not act_dict['status']:
- act_dict['status'] = "check"
- act_dict['output'] = -1
- logger.debug("Adding action %s" % name)
- updates['actions'].append(new_models.ActionEntry.entry_get_or_create(act_dict))
-
- elif ent.kind == 'Package':
- act_dict['target_version'] = ei.reason.version
- act_dict['current_version'] = ei.reason.current_version
- logger.debug("Adding package %s %s" %
- (name, act_dict['target_version']))
- updates['packages'].append(new_models.PackageEntry.entry_get_or_create(act_dict))
- elif ent.kind == 'Path':
- # these might be hard.. they aren't one to one with the old model
- act_dict['path_type'] = 'file'
-
- target_dict = dict(
- owner=ei.reason.owner,
- group=ei.reason.group,
- perms=ei.reason.perms
- )
- fperm, created = new_models.FilePerms.objects.get_or_create(**target_dict)
- act_dict['target_perms'] = fperm
-
- current_dict = dict(
- owner=ei.reason.current_owner,
- group=ei.reason.current_group,
- perms=ei.reason.current_perms
- )
- fperm, created = new_models.FilePerms.objects.get_or_create(**current_dict)
- act_dict['current_perms'] = fperm
-
- if ei.reason.to:
- act_dict['path_type'] = 'symlink'
- act_dict['target_path'] = ei.reason.to
- act_dict['current_path'] = ei.reason.current_to
- logger.debug("Adding link %s" % name)
- updates['paths'].append(new_models.LinkEntry.entry_get_or_create(act_dict))
- continue
-
- act_dict['detail_type'] = new_models.PathEntry.DETAIL_UNUSED
- if ei.reason.unpruned:
- # this is the only other case we know what the type really is
- act_dict['path_type'] = 'directory'
- act_dict['detail_type'] = new_models.PathEntry.DETAIL_PRUNED
- act_dict['details'] = ei.reason.unpruned
-
-
- if ei.reason.is_sensitive:
- act_dict['detail_type'] = new_models.PathEntry.DETAIL_SENSITIVE
- elif ei.reason.is_binary:
- act_dict['detail_type'] = new_models.PathEntry.DETAIL_BINARY
- act_dict['details'] = ei.reason.current_diff
- elif ei.reason.current_diff:
- act_dict['detail_type'] = new_models.PathEntry.DETAIL_DIFF
- act_dict['details'] = ei.reason.current_diff
- logger.debug("Adding path %s" % name)
- updates['paths'].append(new_models.PathEntry.entry_get_or_create(act_dict))
-
- elif ent.kind == 'Service':
- act_dict['target_status'] = ei.reason.status
- act_dict['current_status'] = ei.reason.current_status
- logger.debug("Adding service %s" % name)
- updates['services'].append(new_models.ServiceEntry.entry_get_or_create(act_dict))
- else:
- logger.warn("Skipping type %s" % ent.kind)
-
- for entry_type in updates.keys():
- i = 0
- while(i < len(updates[entry_type])):
- getattr(newint, entry_type).add(*updates[entry_type][i:i+100])
- i += 100
-
- for perf in inter.performance_items.all():
- new_models.Performance(
- interaction=newint,
- metric=perf.metric,
- value=perf.value).save()
-
-
-def _shove(old_table, new_table, columns):
- cols = ",".join([_quote(f) for f in columns])
- sql = "insert into %s(%s) select %s from %s" % (
- _quote(new_table),
- cols,
- cols,
- _quote(old_table))
-
- cursor = connection.cursor()
- cursor.execute(sql)
- cursor.close()
-
-
-@transaction.commit_manually
-def _restructure():
- """major restructure of reporting data"""
-
- logger.info("Migrating clients")
- try:
- _shove(legacy_models.Client._meta.db_table, new_models.Client._meta.db_table,
- ('id', 'name', 'creation', 'expiration'))
- except:
- logger.error("Failed to migrate clients", exc_info=1)
- return False
-
- logger.info("Migrating Bundles")
- try:
- _shove(legacy_models.Bundle._meta.db_table, new_models.Bundle._meta.db_table,
- ('id', 'name'))
- except:
- logger.error("Failed to migrate bundles", exc_info=1)
- return False
-
- logger.info("Migrating Groups")
- try:
- _shove(legacy_models.Group._meta.db_table, new_models.Group._meta.db_table,
- ('id', 'name', 'profile', 'public', 'category', 'comment'))
- except:
- logger.error("Failed to migrate groups", exc_info=1)
- return False
-
- try:
- entries = {}
- for ent in legacy_models.Entries.objects.all():
- entries[ent.id] = ent
- except:
- logger.error("Failed to populate entries dict", exc_info=1)
- return False
-
- transaction.commit()
-
- failures = []
- int_count = legacy_models.Interaction.objects.count()
- int_ctr = 0
- for inter in legacy_models.Interaction.objects.select_related().all():
- if int_ctr % 1000 == 0:
- logger.info("Migrated %s of %s interactions" % (int_ctr, int_count))
- try:
- _migrate_transaction(inter, entries)
- except:
- logger.error("Failed to migrate interaction %s for %s" %
- (inter.id, inter.client.name), exc_info=1)
- failures.append(inter.id)
- int_ctr += 1
- if not failures:
- logger.info("Successfully restructured reason data")
- return True
-
-
-if __name__ == '__main__':
- Bcfg2.Logger.setup_logging('bcfg2-report-collector',
- to_console=logging.INFO,
- level=logging.INFO)
- _restructure()
-
diff --git a/src/lib/Bcfg2/Server/Admin/Reports.py b/src/lib/Bcfg2/Server/Admin/Reports.py
index 815d34e97..ee2f79b03 100644
--- a/src/lib/Bcfg2/Server/Admin/Reports.py
+++ b/src/lib/Bcfg2/Server/Admin/Reports.py
@@ -86,7 +86,6 @@ class Reports(Bcfg2.Server.Admin.Mode):
raise SystemExit(-3)
def __call__(self, args):
- Bcfg2.Server.Admin.Mode.__call__(self, args)
if len(args) == 0 or args[0] == '-h':
print(self.__usage__)
raise SystemExit(0)