diff --git a/EcAlarm.h b/EcAlarm.h
index 7e31d6b..ad91d83 100644
--- a/EcAlarm.h
+++ b/EcAlarm.h
@@ -461,6 +461,8 @@ EcMakeManagedObject(NSString *host, NSString *process, NSString *component);
/**
* Initialises the receiver as an alarm for a particular event.
+ * The managedObject argument may be nil if the alarm should use the
+ * default managed object value for the current process.
* The eventDate argument may be nil if the alarm should use the current
* timestamp.
* The managedObject, eventType, probableCause, and specificProblem
diff --git a/EcProcess.h b/EcProcess.h
index 5b66fe7..e664c79 100644
--- a/EcProcess.h
+++ b/EcProcess.h
@@ -345,10 +345,35 @@ extern NSString* cmdVersion(NSString *ver);
*/
@interface EcProcess : NSObject
+/** Convenience method to produce a generic configuration alarm and send
+ * it via the -alarm: method.
+ * The managed object may be nil (in which case it's the current process).
+ * The implied event type is EcAlarmEventTypeProcessingError.
+ * The implied probable cause is EcAlarmConfigurationOrCustomizationError.
+ * The implied severity is EcAlarmSeverityMajor unless isCritical is YES.
+ * The implied trend is EcAlarmTrendNone.
+ * The implied proposed repair action is to check/correct the config.
+ * The specific problem and additional text should be used to suggest
+ * what is wrong with the config and where the config error should be
+ * found/corrected.
+ */
+- (EcAlarm*) alarmConfigurationFor: (NSString*)managedObject
+ specificProblem: (NSString*)specificProblem
+ additionalText: (NSString*)additionalText
+ critical: (BOOL)isCritical;
+
/** Returns the array of current alarms.
*/
- (NSArray*) alarms;
+/** Convenience method to clear an alarm as produced by the
+ * -alarmConfigErrorFor:specificProblem:perceivedSeverity:additionalText:
+ * method.
+ */
+- (void) clearConfigurationFor: (NSString*)managedObject
+ specificProblem: (NSString*)specificProblem
+ additionalText: (NSString*)additionalText;
+
/** Return a short copyright notice ... subclasses should override.
*/
- (NSString*) ecCopyright;
diff --git a/EcProcess.m b/EcProcess.m
index 662e574..3764124 100644
--- a/EcProcess.m
+++ b/EcProcess.m
@@ -1310,14 +1310,61 @@ static NSString *noFiles = @"No log files to archive";
return started;
}
+- (oneway void) alarm: (in bycopy EcAlarm*)event
+{
+ [alarmDestination alarm: event];
+}
+
+- (EcAlarm*) alarmConfigurationFor: (NSString*)managedObject
+ specificProblem: (NSString*)specificProblem
+ additionalText: (NSString*)additionalText
+ critical: (BOOL)isCritical
+{
+ EcAlarmSeverity severity;
+ NSString *action;
+ EcAlarm *a;
+
+ if (YES == isCritical)
+ {
+ severity = EcAlarmSeverityCritical;
+ }
+ else
+ {
+ severity = EcAlarmSeverityMajor;
+ }
+ action = @"Check/correct configuration"; // FIXME ... localize
+ a = [EcAlarm alarmForManagedObject: managedObject
+ at: nil
+ withEventType: EcAlarmEventTypeProcessingError
+ probableCause: EcAlarmConfigurationOrCustomizationError
+ specificProblem: specificProblem
+ perceivedSeverity: severity
+ proposedRepairAction: action
+ additionalText: additionalText];
+ [self alarm: a];
+ return a;
+}
+
- (NSArray*) alarms
{
return [alarmDestination alarms];
}
-- (oneway void) alarm: (in bycopy EcAlarm*)event
+- (void) clearConfigurationFor: (NSString*)managedObject
+ specificProblem: (NSString*)specificProblem
+ additionalText: (NSString*)additionalText
{
- [alarmDestination alarm: event];
+ EcAlarm *a;
+
+ a = [EcAlarm alarmForManagedObject: managedObject
+ at: nil
+ withEventType: EcAlarmEventTypeProcessingError
+ probableCause: EcAlarmConfigurationOrCustomizationError
+ specificProblem: specificProblem
+ perceivedSeverity: EcAlarmSeverityCleared
+ proposedRepairAction: nil
+ additionalText: additionalText];
+ [self alarm: a];
}
- (oneway void) domanage: (in bycopy NSString*)managedObject