Skip to main content

IMoBroService

The IMoBroService allows plugins to interact with MoBro. It is used to register items, update metric values, report errors, and more.

info

Registrations and metric value updates are queued and sent to MoBro asynchronously in batches. All functions return immediately and can safely be called from any thread.

Functions​

Register(IEnumerable<IMoBroItem>)​

Registers multiple items with the service.

Parameters​

NameTypeDescription
itemsIEnumerable<IMoBroItem>The items to register.

Example​

IEnumerable<IMoBroItem> metrics = CreateMetrics();
_mobro.Register(metrics);

Register(IMoBroItem)​

Registers a single item with the service.

Parameters​

NameTypeDescription
itemIMoBroItemThe item to register.

Example​

var metric = MoBroItem
.CreateMetric()
.WithId("os_name")
.WithLabel("Operating System")
.OfType(CoreMetricType.Text)
.OfCategory(CoreCategory.System)
.OfNoGroup()
.AsStaticValue()
.Build();

_mobro.Register(metric);
note

Items that fail validation (e.g. an invalid ID or a reference to an unregistered category) are not registered. Inside MoBro, the item is skipped and a warning is logged. When running locally, a MoBroItemValidationException is thrown instead, so you notice such problems during development. See Validation and Limits.


Unregister(IEnumerable<string>)​

Unregisters multiple items from the service.

Parameters​

NameTypeDescription
idsIEnumerable<string>The IDs of the items to unregister.

Example​

_mobro.Unregister(["os_name", "cpu_usage"]);

Unregister(string)​

Unregisters a single item from the service.

Parameters​

NameTypeDescription
idstringThe ID of the item to unregister.

Example​

_mobro.Unregister("os_name");

GetAll(): IEnumerable<IMoBroItem>​

Retrieves all registered items.

Example​

foreach (var item in _mobro.GetAll())
{
_logger.LogInformation("Item: {ItemId}", item.Id);
}

GetAll<T>(): IEnumerable<T>​

Retrieves all registered items of a specific type. T must implement IMoBroItem.

Example​

foreach (var metric in _mobro.GetAll<Metric>())
{
_logger.LogInformation("Metric: {MetricId} - {Label}", metric.Id, metric.Label);
}

TryGet<T>(string, out T): bool​

Retrieves the registered item of type T with the specified ID.

Parameters​

NameTypeDescription
idstringThe ID of the item to retrieve.
itemT (out)Contains the registered item if found; otherwise null.

Returns​

true if an item with the given ID and type is registered; otherwise false.

Example​

if (_mobro.TryGet<Metric>("os_name", out var metric))
{
_logger.LogInformation("Metric: {Label}", metric.Label);
}

ClearRegistration()​

Unregisters all currently registered items.


UpdateMetricValue(string, object?)​

Pushes a new value for a registered metric, with the timestamp automatically set to DateTime.UtcNow.

Parameters​

NameTypeDescription
idstringThe ID of the metric.
valueobject?The new value of the metric.

Example​

_mobro.UpdateMetricValue("cpu_usage", 42.69);

UpdateMetricValue(string, object?, DateTime)​

Pushes a new value for a registered metric, measured at the given point in time.

Parameters​

NameTypeDescription
idstringThe ID of the metric.
valueobject?The new value of the metric.
timestampDateTimeThe date and time the value was measured, in UTC.

Example​

_mobro.UpdateMetricValue("cpu_usage", 42.69, DateTime.UtcNow);

UpdateMetricValue(in MetricValue)​

Pushes a single new MetricValue.

Example​

_mobro.UpdateMetricValue(new MetricValue("cpu_usage", DateTime.UtcNow, 42.69));

UpdateMetricValues(IEnumerable<MetricValue>)​

Pushes new values for one or more registered metrics at once.

Example​

IEnumerable<MetricValue> metricValues = ReadAllSensors();
_mobro.UpdateMetricValues(metricValues);
caution

All UpdateMetricValue(s) functions throw a MetricValueValidationException if a value does not match the metric's MetricValueType. If not caught, this stops the plugin. Updates for metrics that are not registered are ignored. See Updating Metric Values.


GetMetricValues(): IEnumerable<MetricValue>​

Gets the most recent values of all metrics.

Example​

foreach (var metricValue in _mobro.GetMetricValues())
{
_logger.LogInformation("{MetricId}: {Value}", metricValue.Id, metricValue.Value);
}

GetMetricValue(string): MetricValue?​

Gets the most recent value of the metric with the specified ID.

Returns​

The current MetricValue of the metric, or null if no value has been set yet.

Example​

if (_mobro.GetMetricValue("os_name") is { } osName)
{
_logger.LogInformation("Current OS: {OsName}", osName.Value);
}

SetDependencyStatus(string, DependencyStatus)​

Reports the current status of an external dependency declared in the dependencies field of mobro_plugin_config.json. MoBro displays this status to the user, e.g. to point out that a required third-party program is not installed.

caution

For dependencies marked as required, MoBro shows the plugin as dependencies missing until the status Ok has been reported. See Required Dependencies.

Parameters​

NameTypeDescription
dependencyNamestringThe name of the dependency as defined in the plugin configuration.
dependencyStatusDependencyStatusThe current status of the dependency.

DependencyStatus​

ValueDescription
UnknownThe status of the dependency is unknown.
OkThe dependency is available and working.
MissingThe dependency is missing and cannot be used.
OutdatedThe dependency is outdated and should be updated.

Example​

if (!IsAida64Running())
{
_mobro.SetDependencyStatus("aida64", DependencyStatus.Missing);
return;
}

_mobro.SetDependencyStatus("aida64", DependencyStatus.Ok);

Error(string)​

Notifies MoBro of an unrecoverable error. MoBro stops the plugin and sets its state to Error, displaying the given message.

Example​

_mobro.Error("Sensor library could not be initialized");

Error(Exception)​

Notifies MoBro of an unrecoverable error caused by an exception. MoBro stops the plugin and sets its state to Error.

Example​

try
{
InitializeSensors();
}
catch (Exception e)
{
_logger.LogError(e, "Failed to initialize sensors");
_mobro.Error(e);
}