summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Bcfg2/Reporting/Storage/DjangoORM.py')
-rw-r--r--src/lib/Bcfg2/Reporting/Storage/DjangoORM.py62
1 files changed, 34 insertions, 28 deletions
diff --git a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
index 98226dc4e..c9aa169bf 100644
--- a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
+++ b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
@@ -2,15 +2,12 @@
The base for the original DjangoORM (DBStats)
"""
-import os
-import traceback
from lxml import etree
from datetime import datetime
+import traceback
from time import strptime
-
-os.environ['DJANGO_SETTINGS_MODULE'] = 'Bcfg2.settings'
-from Bcfg2 import settings
-
+import Bcfg2.Options
+import Bcfg2.DBSettings
from Bcfg2.Compat import md5
from Bcfg2.Reporting.Storage.base import StorageBase, StorageError
from Bcfg2.Server.Plugin.exceptions import PluginExecutionError
@@ -28,9 +25,13 @@ from Bcfg2.Reporting.Compat import transaction
class DjangoORM(StorageBase):
- def __init__(self, setup):
- super(DjangoORM, self).__init__(setup)
- self.size_limit = setup.get('reporting_file_limit')
+ options = StorageBase.options + [
+ Bcfg2.Options.Common.repository,
+ Bcfg2.Options.Option(
+ cf=('reporting', 'file_limit'),
+ type=Bcfg2.Options.Types.size,
+ help='Reporting file size limit',
+ default=1024 * 1024)]
def _import_default(self, entry, state, entrytype=None, defaults=None,
mapping=None, boolean=None, xforms=None):
@@ -108,8 +109,8 @@ class DjangoORM(StorageBase):
# extra entries are a bit different. They can have Instance
# objects
if not act_dict['target_version']:
- for instance in entry.findall("Instance"):
- # FIXME - this probably only works for rpms
+ instance = entry.find("Instance")
+ if instance:
release = instance.get('release', '')
arch = instance.get('arch', '')
act_dict['current_version'] = instance.get('version')
@@ -117,9 +118,8 @@ class DjangoORM(StorageBase):
act_dict['current_version'] += "-" + release
if arch:
act_dict['current_version'] += "." + arch
- self.logger.debug("Adding package %s %s" %
- (name, act_dict['current_version']))
- return PackageEntry.entry_get_or_create(act_dict)
+ self.logger.debug("Adding extra package %s %s" %
+ (name, act_dict['current_version']))
else:
self.logger.debug("Adding package %s %s" %
(name, act_dict['target_version']))
@@ -127,7 +127,7 @@ class DjangoORM(StorageBase):
# not implemented yet
act_dict['verification_details'] = \
entry.get('verification_details', '')
- return PackageEntry.entry_get_or_create(act_dict)
+ return PackageEntry.entry_get_or_create(act_dict)
def _import_Path(self, entry, state):
name = entry.get('name')
@@ -185,7 +185,7 @@ class DjangoORM(StorageBase):
act_dict['detail_type'] = PathEntry.DETAIL_DIFF
cdata = entry.get('current_bdiff')
if cdata:
- if len(cdata) > self.size_limit:
+ if len(cdata) > Bcfg2.Options.setup.file_limit:
act_dict['detail_type'] = PathEntry.DETAIL_SIZE_LIMIT
act_dict['details'] = md5(cdata).hexdigest()
else:
@@ -284,6 +284,14 @@ class DjangoORM(StorageBase):
Group.objects.get_or_create(name=metadata['profile'])
else:
profile = None
+
+ flags = {'dry_run': False, 'only_important': False}
+ for flag in stats.findall('./Flags/Flag'):
+ value = flag.get('value', default='false').lower() == 'true'
+ name = flag.get('name')
+ if name in flags:
+ flags[name] = value
+
inter = Interaction(client=client,
timestamp=timestamp,
state=stats.get('state', default="unknown"),
@@ -292,7 +300,8 @@ class DjangoORM(StorageBase):
good_count=stats.get('good', default="0"),
total_count=stats.get('total', default="0"),
server=server,
- profile=profile)
+ profile=profile,
+ **flags)
inter.save()
self.logger.debug("Interaction for %s at %s with INSERTED in to db" %
(client.id, timestamp))
@@ -365,7 +374,6 @@ class DjangoORM(StorageBase):
def import_interaction(self, interaction):
"""Import the data into the backend"""
-
try:
try:
self._import_interaction(interaction)
@@ -380,23 +388,21 @@ class DjangoORM(StorageBase):
def validate(self):
"""Validate backend storage. Should be called once when loaded"""
-
- settings.read_config(repo=self.setup['repo'])
-
# verify our database schema
try:
- if self.setup['debug']:
+ if Bcfg2.Options.setup.debug:
vrb = 2
- elif self.setup['verbose']:
+ elif Bcfg2.Options.setup.verbose:
vrb = 1
else:
vrb = 0
- management.call_command("syncdb", verbosity=vrb, interactive=False)
- management.call_command("migrate", verbosity=vrb, interactive=False)
+ Bcfg2.DBSettings.sync_databases(verbosity=vrb, interactive=False)
+ Bcfg2.DBSettings.migrate_databases(verbosity=vrb,
+ interactive=False)
except:
- self.logger.error("Failed to update database schema: %s" % \
- traceback.format_exc().splitlines()[-1])
- raise StorageError
+ msg = "Failed to update database schema: %s" % sys.exc_info()[1]
+ self.logger.error(msg)
+ raise StorageError(msg)
def GetExtra(self, client):
"""Fetch extra entries for a client"""