Ejemplo n.º 1
0
 def new_change_message(self, obj):
     if obj.content_type.model in ('probe', 'metric'):
         change_message = new_comment(obj.change_message, obj.object_id,
                                      get_version_id(obj),
                                      obj.content_type.id)
     else:
         change_message = new_comment(comment=obj.change_message,
                                      obj_id=obj.object_id,
                                      ctt_id=obj.content_type.id)
     return change_message
Ejemplo n.º 2
0
    def get(self, request, obj, name=None):
        history_model = {
            'probe': admin_models.ProbeHistory,
            'metrictemplate': admin_models.MetricTemplateHistory
        }

        if name:
            history_instance = history_model[obj].objects.filter(name=name)

            if history_instance.count() == 0:
                raise NotFound(status=404, detail='Version not found')

            else:
                instance = history_instance[0].object_id

                vers = history_model[obj].objects.filter(
                    object_id=instance).order_by('-date_created')

                results = []
                for ver in vers:
                    if isinstance(instance, admin_models.Probe):
                        version = ver.package.version
                        fields = {
                            'name': ver.name,
                            'version': ver.package.version,
                            'package': ver.package.__str__(),
                            'description': ver.description,
                            'comment': ver.comment,
                            'repository': ver.repository,
                            'docurl': ver.docurl
                        }
                    else:
                        if ver.probekey:
                            probekey = ver.probekey.__str__()
                            version = ver.probekey.__str__().split(
                                ' ')[1][1:-1]
                        else:
                            probekey = ''
                            version = datetime.datetime.strftime(
                                ver.date_created, '%Y-%m-%d %H:%M:%S')
                        fields = {
                            'name':
                            ver.name,
                            'mtype':
                            ver.mtype.name,
                            'probeversion':
                            probekey,
                            'parent':
                            one_value_inline(ver.parent),
                            'probeexecutable':
                            one_value_inline(ver.probeexecutable),
                            'config':
                            two_value_inline(ver.config),
                            'attribute':
                            two_value_inline(ver.attribute),
                            'dependency':
                            two_value_inline(ver.dependency),
                            'flags':
                            two_value_inline(ver.flags),
                            'files':
                            two_value_inline(ver.files),
                            'parameter':
                            two_value_inline(ver.parameter),
                            'fileparameter':
                            two_value_inline(ver.fileparameter)
                        }

                    results.append(
                        dict(id=ver.id,
                             object_repr=ver.__str__(),
                             fields=fields,
                             user=ver.version_user,
                             date_created=datetime.datetime.strftime(
                                 ver.date_created, '%Y-%m-%d %H:%M:%S'),
                             comment=new_comment(ver.version_comment),
                             version=version))

                results = sorted(results, key=lambda k: k['id'], reverse=True)
                return Response(results)

        else:
            vers = history_model[obj].objects.all()
            results = sorted([ver.__str__() for ver in vers], key=str.lower)

            return Response(results)
Ejemplo n.º 3
0
    def get(self, request, obj, name=None):
        models = {
            'metric': poem_models.Metric,
            'metricprofile': poem_models.MetricProfiles,
            'aggregationprofile': poem_models.Aggregation,
            'thresholdsprofile': poem_models.ThresholdsProfiles
        }

        ct = ContentType.objects.get_for_model(models[obj])

        if name:
            try:
                obj = models[obj].objects.get(name=name)
            except models[obj].DoesNotExist:
                if obj.endswith('profile'):
                    ind = obj.find('profile')
                    msg = '{} profile not found.'.format(
                        obj[0:ind].capitalize())
                else:
                    msg = '{} not found.'.format(obj.capitalize())

                raise NotFound(status=404, detail=msg)

            vers = poem_models.TenantHistory.objects.filter(
                object_id=obj.id, content_type=ct).order_by('date_created')

            if vers.count() == 0:
                raise NotFound(status=404, detail='Version not found.')

            else:
                results = []
                for ver in vers:
                    version = datetime.datetime.strftime(
                        ver.date_created, '%Y%m%d-%H%M%S')
                    fields0 = json.loads(ver.serialized_data)[0]['fields']

                    if isinstance(obj, poem_models.Metric):
                        if fields0['probekey']:
                            probeversion = '{} ({})'.format(
                                fields0['probekey'][0], fields0['probekey'][1])
                        else:
                            probeversion = ''

                        fields = {
                            'name':
                            fields0['name'],
                            'mtype':
                            fields0['mtype'][0],
                            'group':
                            fields0['group'][0],
                            'probeversion':
                            probeversion,
                            'parent':
                            one_value_inline(fields0['parent']),
                            'probeexecutable':
                            one_value_inline(fields0['probeexecutable']),
                            'config':
                            two_value_inline(fields0['config']),
                            'attribute':
                            two_value_inline(fields0['attribute']),
                            'dependancy':
                            two_value_inline(fields0['dependancy']),
                            'flags':
                            two_value_inline(fields0['flags']),
                            'files':
                            two_value_inline(fields0['files']),
                            'parameter':
                            two_value_inline(fields0['parameter']),
                            'fileparameter':
                            two_value_inline(fields0['fileparameter'])
                        }

                    elif isinstance(obj, poem_models.MetricProfiles):
                        mi = [{
                            'service': item[0],
                            'metric': item[1]
                        } for item in fields0['metricinstances']]
                        fields = {
                            'name':
                            fields0['name'],
                            'groupname':
                            fields0['groupname'],
                            'description':
                            fields0.get('description', ''),
                            'apiid':
                            fields0['apiid'],
                            'metricinstances':
                            sorted(mi, key=lambda k: k['service'].lower())
                        }

                    else:
                        fields = fields0

                    try:
                        comment = []
                        untracked_fields = [
                            'mtype', 'parent', 'probeexecutable', 'attribute',
                            'dependancy', 'flags', 'files', 'parameter',
                            'fileparameter'
                        ]
                        if isinstance(obj, poem_models.Metric):
                            untracked_fields.append('name')

                        for item in json.loads(ver.comment):
                            if 'changed' in item:
                                action = 'changed'

                            elif 'added' in item:
                                action = 'added'

                            else:
                                action = 'deleted'

                            if 'object' not in item[action]:
                                new_fields = []
                                for field in item[action]['fields']:
                                    if field not in untracked_fields:
                                        new_fields.append(field)

                                if new_fields:
                                    comment.append(
                                        {action: {
                                            'fields': new_fields
                                        }})

                            else:
                                if item[action]['fields'][0] not in \
                                        untracked_fields:
                                    if item[action]['fields'][0] == 'config':
                                        if 'path' in item[action]['object']:
                                            item[action]['object'].remove(
                                                'path')
                                    comment.append(item)

                        comment = json.dumps(comment)

                    except json.JSONDecodeError:
                        comment = ver.comment

                    results.append(
                        dict(id=ver.id,
                             object_repr=ver.object_repr,
                             fields=fields,
                             user=ver.user,
                             date_created=datetime.datetime.strftime(
                                 ver.date_created, '%Y-%m-%d %H:%M:%S'),
                             comment=new_comment(comment),
                             version=version))

                results = sorted(results, key=lambda k: k['id'], reverse=True)
                return Response(results)

        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 4
0
def get_new_comment(comment, obj_id=None, version_id=None, ctt_id=None):
    return new_comment(comment, obj_id, version_id, ctt_id)