E = ElementMaker(nsmap={'xsi': XSI})

root = E.BackendResponseTimes(Controller=c.base_url,
                              GenerationTime=now_rfc3339())
root.set('{%s}noNamespaceSchemaLocation' % XSI, 'backend_metrics.xsd')

for k, v in sorted(rows.items()):
    v.setdefault('cpm_max_time', '')
    v.setdefault('epm_max_time', '')
    root.append(
        E.Backend(
            E.ApplicationName(v['app']),
            E.BackendName(k),
            E.AverageResponseTime(str(v.get('art', 0))),
            E.CallsPerMinute(str(v.get('cpm_average', 0))),
            E.TotalCalls(str(v.get('total_calls', 0))),
            E.MaximumCallsPerMinute(str(v.get('cpm_max', 0))),
            E.MaximumCallTime(
                v['cpm_max_time'].isoformat('T') if v['cpm_max_time'] else ''),
            E.ErrorsPerMinute(str(v.get('epm_avg', 0))),
            E.TotalErrors(str(v.get('total_errors', 0))),
            E.MaximumErrorsPerMinute(str(v.get('epm_max', 0))),
            E.MaximumErrorTime(
                v['epm_max_time'].isoformat('T') if v['epm_max_time'] else ''),
        ))

# Print the report to stdout.

print(etree.ProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'))
print(etree.tostring(root, pretty_print=True, encoding='UTF-8'))
Пример #2
0
def dump_class(uri, oc, outfile=None, extend=None, rdn=None, contains=None):
    subschemasubentry_dn, schema = ldap.schema.urlfetch(uri)
    schema_reverse = ldap.schema.SubSchema(schema.ldap_entry())

    oco = schema.get_obj(ldap.schema.ObjectClass, oc)
    if oco is None:
        log.error(
            "unknown objectclass '%s' - please use the --list option to see what's there"
            % oc)
        exit(1)

    # Complete attributes in case of inheritance
    if oco.kind == 0:
        r = resolve_inherited_attrs(schema, oco.sup[0])
        oco.must = list(set(list(oco.must) + r['must']))
        oco.may = list(set(list(oco.may) + r['must']))

    # Build resulting XML dump
    e = ElementMaker(namespace="http://www.gonicus.de/Objects",
                     nsmap={None: "http://www.gonicus.de/Objects"})
    more = []
    if oco.desc:
        more.append(e.Description(oco.desc))
    more.append(e.Backend("LDAP"))
    if oco.kind == 0:
        if not rdn:
            log.error(
                "no RDN provided - please use --rdn <value> to specify one")
            exit(1)
        more.append(
            e.BackendParameters(e.Backend("LDAP", objectClasses=oc, RDN=rdn)))

    if oco.kind != 0:
        more.append(e.BaseObject("false"))
    else:
        more.append(e.BaseObject("true"))

    # Build attribute set
    attrs = []
    syntax = None
    for mua in oco.must:
        attr = resolve_attribute(schema, mua)
        syntax = attr['syntax']

        if skip(syntax):
            continue

        values = gen_values(syntax)
        values += gen_validators(syntax)
        values += gen_index(syntax)

        attrs.append(
            e.Attribute(
                e.Name(attr['name']), e.Description(attr['desc']),
                e.Type(attr['type']),
                e.MultiValue("true" if attr['multivalue'] else "false"),
                e.Mandatory("true"), *values))

    for mua in oco.may:
        attr = resolve_attribute(schema, mua)
        syntax = attr['syntax']
        if skip(syntax):
            continue

        values = gen_values(syntax)
        values += gen_validators(syntax)
        values += gen_index(syntax)
        attrs.append(
            e.Attribute(
                e.Name(attr['name']), e.Description(attr['desc']),
                e.Type(attr['type']),
                e.MultiValue("true" if attr['multivalue'] else "false"),
                e.Mandatory("false"), *values))

    more.append(e.Attributes(*attrs))

    # Add container
    if contains == None:
        c = []
        for typ in contains.split(","):
            c.append(e.Type(typ))
        more.append(e.Container(*c))

    # Maintain extension
    if extend == None:
        more.append(e.Extends(e.Value(extend)))

    res = '<?xml version="1.0" encoding="UTF-8"?>\n'
    data = e.Objects(e.Object(e.Name(oc), e.DisplayName(oc), *more))
    res += etree.tostring(data, pretty_print=True).decode('utf-8')

    return res