public static function createForMonitorConfig(array $monitorConfiguration, array $filter = [])
{
$monitors = collect($monitorConfiguration);
if (count($filter) && !empty($filter[0])) {
$monitors = $monitors->only($filter);
}
$configured_monitors = collect();
$monitors->map(function ($monitorConfigs, $monitorName) {
if (file_exists(__DIR__ . '/' . ucfirst($monitorName) . 'Monitor.php')) {
$className = '\\EricMakesStuff\\ServerMonitor\\Monitors\\' . ucfirst($monitorName) . 'Monitor';
return collect($monitorConfigs)->map(function ($monitorConfig) use($className) {
return app($className, [$monitorConfig]);
});
}
throw InvalidConfiguration::cannotFindMonitor($monitorName);
})->each(function ($monitor_group) use($configured_monitors) {
$monitor_group->each(function ($monitor) use($configured_monitors) {
$configured_monitors->push($monitor);
});
});
return $configured_monitors;
}