use of org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable in project ovirt-engine by oVirt.
the class IrsProxy method handleSelectedVdsForSPM.
private String handleSelectedVdsForSPM(StoragePool storagePool, RefObject<VDS> selectedVds, RefObject<SpmStatusResult> spmStatus, StoragePoolStatus prevStatus) {
String returnValue = null;
if (spmStatus.argvalue == null || spmStatus.argvalue.getSpmStatus() != SpmStatus.SPM) {
movePoolToProblematicInDB(storagePool);
selectedVds.argvalue = null;
log.info("spm start treatment ended and status is not SPM!!! status: '{}' - setting selectedVds to null!", spmStatus.argvalue != null ? spmStatus.argvalue.getSpmStatus() : null);
} else {
init(selectedVds.argvalue);
storagePool.setLVER(spmStatus.argvalue.getSpmLVER());
storagePool.setSpmVdsId(selectedVds.argvalue.getId());
// host move pool to up
if (prevStatus != StoragePoolStatus.NotOperational && prevStatus != StoragePoolStatus.NonResponsive) {
storagePool.setStatus(prevStatus);
} else {
storagePool.setStatus(StoragePoolStatus.Up);
}
storagePoolDao.update(storagePool);
getEventListener().storagePoolStatusChanged(storagePool.getId(), storagePool.getStatus());
setFencedIrs(null);
returnValue = selectedVds.argvalue.getHostName();
log.info("Initialize Irs proxy from vds: {}", returnValue);
AuditLogable logable = new AuditLogableImpl();
logable.setVdsName(selectedVds.argvalue.getHostName());
logable.addCustomValue("ServerIp", returnValue);
logable.addCustomValue("StoragePoolName", storagePool.getName());
auditLogDirector.log(logable, AuditLogType.IRS_HOSTED_ON_VDS);
}
return returnValue;
}
use of org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable in project ovirt-engine by oVirt.
the class IrsProxy method proceedStorageDomain.
private boolean proceedStorageDomain(StorageDomain domainFromVdsm, int dataMasterVersion, StoragePool storagePool) {
StorageDomain storage_domain = storageDomainDao.getForStoragePool(domainFromVdsm.getId(), storagePoolId);
if (storage_domain != null) {
StorageDomainStatic domainFromDb = storage_domain.getStorageStaticData();
StoragePoolIsoMap domainPoolMapFromDb = storage_domain.getStoragePoolIsoMapData();
// If the domain is master in the DB
if (domainFromDb.getStorageDomainType() == StorageDomainType.Master && domainPoolMapFromDb != null && domainPoolMapFromDb.getStatus() != StorageDomainStatus.Locked) {
// and the domain is not master in the VDSM
if (!((domainFromVdsm.getStorageDomainType() == StorageDomainType.Master) || (domainFromVdsm.getStorageDomainType() == StorageDomainType.Unknown))) {
reconstructMasterDomainNotInSync(domainFromVdsm.getStoragePoolId(), domainFromDb, "Mismatch between master in DB and VDSM", MessageFormat.format("Master domain is not in sync between DB and VDSM. " + "Domain {0} marked as master in DB and not in the storage", domainFromDb.getStorageName()));
} else // mismatch
if (dataMasterVersion != storagePool.getMasterDomainVersion()) {
reconstructMasterDomainNotInSync(domainFromVdsm.getStoragePoolId(), domainFromDb, "Mismatch between master version in DB and VDSM", MessageFormat.format("Master domain version is not in sync between DB and VDSM. " + "Domain {0} marked as master, but the version in DB: {1} and in VDSM: {2}", domainFromDb.getStorageName(), storagePool.getMasterDomainVersion(), dataMasterVersion));
}
}
boolean statusChanged = false;
if (domainPoolMapFromDb == null) {
domainFromVdsm.setStoragePoolId(storagePoolId);
storagePoolIsoMapDao.save(domainFromVdsm.getStoragePoolIsoMapData());
statusChanged = true;
} else if (!domainPoolMapFromDb.getStatus().isStorageDomainInProcess() && domainPoolMapFromDb.getStatus() != domainFromVdsm.getStatus()) {
if (domainPoolMapFromDb.getStatus() != StorageDomainStatus.Inactive && domainFromVdsm.getStatus() != StorageDomainStatus.Inactive) {
storagePoolIsoMapDao.update(domainFromVdsm.getStoragePoolIsoMapData());
statusChanged = true;
}
if (domainFromVdsm.getStatus() != null && domainFromVdsm.getStatus() == StorageDomainStatus.Inactive && domainFromDb.getStorageDomainType() == StorageDomainType.Master) {
StoragePool pool = storagePoolDao.get(domainPoolMapFromDb.getStoragePoolId());
if (pool != null) {
storagePoolDao.updateStatus(pool.getId(), StoragePoolStatus.Maintenance);
pool.setStatus(StoragePoolStatus.Maintenance);
getEventListener().storagePoolStatusChanged(pool.getId(), StoragePoolStatus.Maintenance);
}
}
}
// update dynamic data
if (statusChanged || (domainPoolMapFromDb.getStatus() != StorageDomainStatus.Inactive && domainFromVdsm.getStatus() == StorageDomainStatus.Active)) {
storageDomainDynamicDao.update(domainFromVdsm.getStorageDynamicData());
if (domainFromVdsm.getAvailableDiskSize() != null && domainFromVdsm.getUsedDiskSize() != null) {
double freePercent = domainFromVdsm.getStorageDynamicData().getfreeDiskPercent();
AuditLogType type = AuditLogType.UNASSIGNED;
Integer freeDiskInGB = domainFromVdsm.getStorageDynamicData().getAvailableDiskSize();
if (freeDiskInGB != null) {
if (freePercent < domainFromDb.getWarningLowSpaceIndicator()) {
type = AuditLogType.IRS_DISK_SPACE_LOW;
}
if (freeDiskInGB < domainFromDb.getCriticalSpaceActionBlocker()) {
// Note, if both conditions are met, only IRS_DISK_SPACE_LOW_ERROR will be shown
type = AuditLogType.IRS_DISK_SPACE_LOW_ERROR;
}
}
if (type != AuditLogType.UNASSIGNED) {
AuditLogable logable = new AuditLogableImpl();
logable.setStorageDomainName(domainFromDb.getStorageName());
logable.addCustomValue("DiskSpace", domainFromVdsm.getAvailableDiskSize().toString());
domainFromVdsm.setStorageName(domainFromDb.getStorageName());
auditLogDirector.log(logable, type);
}
}
Set<EngineError> alerts = domainFromVdsm.getAlerts();
if (alerts != null && !alerts.isEmpty()) {
AuditLogable logable = new AuditLogableImpl();
logable.setStorageDomainName(domainFromDb.getStorageName());
domainFromVdsm.setStorageName(domainFromDb.getStorageName());
for (EngineError alert : alerts) {
switch(alert) {
case VG_METADATA_CRITICALLY_FULL:
auditLogDirector.log(logable, AuditLogType.STORAGE_ALERT_VG_METADATA_CRITICALLY_FULL);
break;
case SMALL_VG_METADATA:
auditLogDirector.log(logable, AuditLogType.STORAGE_ALERT_SMALL_VG_METADATA);
break;
default:
log.error("Unrecognized alert for domain {}(id = {}): {}", domainFromVdsm.getStorageName(), domainFromVdsm.getId(), alert);
break;
}
}
}
}
// Block domains should have their LUNs synchronized and updated in the DB.
if (statusChanged && domainFromVdsm.getStatus() == StorageDomainStatus.Active && storage_domain.getStorageType().isBlockDomain()) {
return true;
}
} else {
log.debug("The domain with id '{}' was not found in DB", domainFromVdsm.getId());
}
return false;
}
use of org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable in project ovirt-engine by oVirt.
the class HostMonitoring method logLowDiskSpaceOnHostDisks.
/**
* Log that the disks have low space, if the disks list is not empty.
*
* @param disksWithLowSpace
* The disks with the low space.
* @param lowSpaceThreshold
* The low space threshold that below it we log.
* @param logType
* The type of log to use.
*/
private void logLowDiskSpaceOnHostDisks(List<String> disksWithLowSpace, final Integer lowSpaceThreshold, AuditLogType logType) {
if (!disksWithLowSpace.isEmpty()) {
AuditLogable logable = createAuditLogableForHost();
logable.addCustomValue("DiskSpace", lowSpaceThreshold.toString());
logable.addCustomValue("Disks", StringUtils.join(disksWithLowSpace, ", "));
auditLog(logable, logType);
}
}
use of org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable in project ovirt-engine by oVirt.
the class HostMonitoring method checkVdsCpuThreshold.
/**
* check if value is less than configurable threshold , if yes , generated event list message
*/
private void checkVdsCpuThreshold(VdsStatistics stat) {
Integer maxUsedPercentageThreshold = Config.getValue(ConfigValues.LogMaxCpuUsedThresholdInPercentage);
if (stat.getUsageCpuPercent() != null && stat.getUsageCpuPercent() > maxUsedPercentageThreshold) {
AuditLogable logable = createAuditLogableForHost();
logable.addCustomValue("HostName", vds.getName());
logable.addCustomValue("UsedCpu", stat.getUsageCpuPercent().toString());
logable.addCustomValue("Threshold", maxUsedPercentageThreshold.toString());
auditLog(logable, AuditLogType.VDS_HIGH_CPU_USE);
}
}
use of org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable in project ovirt-engine by oVirt.
the class HostMonitoring method checkVdsInterfaces.
// Check if one of the Host interfaces is down, we set the host to non-operational
// We cannot have Host that don't have all networks in cluster in status Up
private void checkVdsInterfaces() {
if (vds.getStatus() != VDSStatus.Up) {
return;
}
Map<String, Set<String>> problematicNicsWithNetworks = new HashMap<>();
try {
reportNicStatusChanges();
problematicNicsWithNetworks = NetworkMonitoringHelper.determineProblematicNics(vds.getInterfaces(), getDbFacade().getNetworkDao().getAllForCluster(vds.getClusterId()));
} catch (Exception e) {
log.error("Failure on checkInterfaces on update runtime info for host '{}': {}", vds.getName(), e.getMessage());
log.debug("Exception", e);
} finally {
if (!problematicNicsWithNetworks.isEmpty()) {
// we give 1 minutes to a nic to get up in case the nic get the ip from DHCP server
if (!hostDownTimes.containsKey(vds.getId())) {
hostDownTimes.put(vds.getId(), System.currentTimeMillis());
return;
}
// if less then 1 minutes, still waiting for DHCP
int delay = Config.<Integer>getValue(ConfigValues.NicDHCPDelayGraceInMS) * 1000;
if (System.currentTimeMillis() < hostDownTimes.get(vds.getId()) + delay) {
return;
}
// if we could retrieve it within the timeout, remove from map (for future checks) and set the host to
// non-operational
hostDownTimes.remove(vds.getId());
try {
String problematicNicsWithNetworksString = constructNicsWithNetworksString(problematicNicsWithNetworks);
vds.setNonOperationalReason(NonOperationalReason.NETWORK_INTERFACE_IS_DOWN);
vdsManager.setStatus(VDSStatus.NonOperational, vds);
log.info("Host '{}' moved to Non-Operational state because interface/s which are down are needed by required network/s in the current cluster: '{}'", vds.getName(), problematicNicsWithNetworksString);
AuditLogable logable = createAuditLogableForHost();
logable.addCustomValue("NicsWithNetworks", problematicNicsWithNetworksString);
logable.setCustomId(problematicNicsWithNetworksString);
auditLog(logable, AuditLogType.VDS_SET_NONOPERATIONAL_IFACE_DOWN);
} catch (Exception e) {
log.error("checkInterface: Failure on moving host: '{}' to non-operational: {}", vds.getName(), e.getMessage());
log.debug("Exception", e);
}
} else {
// no nics are down, remove from list if exists
hostDownTimes.remove(vds.getId());
}
}
}
Aggregations