package org.ovirt.engine.core.bll.hostdeploy; import java.io.StringReader; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl; import org.ovirt.engine.core.uutils.xml.SecureDocumentBuilderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.InputSource; public class InstallerMessages { private static final Logger log = LoggerFactory.getLogger(InstallerMessages.class); private VDS _vds; private String _correlationId; public enum Severity { INFO, WARNING, ERROR }; public InstallerMessages(VDS vds) { _vds = vds; } public void setCorrelationId(String correlationId) { _correlationId = correlationId; } public void post(Severity severity, String text) { AuditLogType logType; AuditLogable logable = new AuditLogableImpl(); logable.setVdsId(_vds.getId()); logable.setVdsName(_vds.getName()); logable.setCorrelationId(_correlationId); logable.addCustomValue("Message", text); switch (severity) { case INFO: logType = AuditLogType.VDS_INSTALL_IN_PROGRESS; log.info("Installation '{}': {}", _vds.getHostName(), text); break; default: case WARNING: logType = AuditLogType.VDS_INSTALL_IN_PROGRESS_WARNING; log.warn("Installation '{}': {}", _vds.getHostName(), text); break; case ERROR: logType = AuditLogType.VDS_INSTALL_IN_PROGRESS_ERROR; log.error("Installation '{}': {}", _vds.getHostName(), text); break; } new AuditLogDirector().log(logable, logType); } public boolean postOldXmlFormat(String message) { boolean error = false; if (StringUtils.isEmpty(message)) { return error; } String[] msgs = message.split("[\\n]", -1); if (msgs.length > 1) { for (String msg : msgs) { error = postOldXmlFormat(msg) || error; } return error; } if (StringUtils.isNotEmpty(message)) { if (message.charAt(0) == '<') { try { error = internalPostOldXmlFormat(message); } catch (RuntimeException e) { error = true; log.error( "Installation of Host. Received illegal XML from Host. Message: {}", message); log.debug("Exception", e); } } else { log.info("VDS message: {}", message); } } return error; } private boolean internalPostOldXmlFormat(String message) { boolean error = false; Document doc = null; try { doc = SecureDocumentBuilderFactory.newDocumentBuilderFactory().newDocumentBuilder().parse(new InputSource(new StringReader(message))); } catch (Exception e) { throw new RuntimeException(e); } Element node = doc.getDocumentElement(); if (node != null) { StringBuilder sb = new StringBuilder(); // check status Severity severity; if (StringUtils.isEmpty(node.getAttribute("status"))) { severity = Severity.WARNING; } else if (node.getAttribute("status").equals("OK")) { severity = Severity.INFO; } else if (node.getAttribute("status").equals("WARN")) { severity = Severity.WARNING; } else { error = true; severity = Severity.ERROR; } if (StringUtils.isNotEmpty(node.getAttribute("component"))) { sb.append("Step: " + node.getAttribute("component")); } if (StringUtils.isNotEmpty(node.getAttribute("message"))) { sb.append("; "); sb.append("Details: " + node.getAttribute("message")); sb.append(" "); } if (StringUtils.isNotEmpty(node.getAttribute("result"))) { sb.append(" (" + node.getAttribute("result") + ")"); } post(severity, sb.toString()); } return error; } }