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'))
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