Initial commit: Complete workspace configuration

- MOper/ configurations
- home-assistant/ configurations
- scripts/ automation scripts
- unix/ system configurations
- docker/ Docker services (app, devtools, database, infra, maintenance, portainer, supervision, test)

Excludes: databases, logs, large files, Git submodules, secrets (via .gitignore)
This commit is contained in:
2026-01-02 16:09:32 +00:00
commit 07377e5237
6048 changed files with 1248288 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
<?php
require_once 'api/functions.php';
$Organizr = new Organizr();
if ($Organizr->isLocalOrServer() && $Organizr->hasDB()) {
// Set user as Organizr API
$_GET['apikey'] = $Organizr->config['organizrAPI'];
// Create a new scheduler
$scheduler = new GO\Scheduler();
// Clear any pre-existing jobs if any
$scheduler->clearJobs();
$Organizr->log('Cron')->debug('Cron process starting');
// Auto-update Cron
if ($Organizr->config['autoUpdateCronEnabled'] && $Organizr->config['autoUpdateCronSchedule']) {
try {
$schedule = new Cron\CronExpression($Organizr->config['autoUpdateCronSchedule']);
$Organizr->log('Cron')->debug('Cron schedule has passed validation', ['schedule' => $Organizr->config['autoUpdateCronSchedule']]);
$scheduler->call(
function () use ($Organizr) {
$Organizr->log('Cron')->debug('Running cron job', ['function' => 'Auto-update']);
return $Organizr->updateOrganizr();
})
->then(function ($output) use ($Organizr) {
$Organizr->log('Cron')->debug('Completed cron job', [
'output' => $output,
]);
})
->at($Organizr->config['autoUpdateCronSchedule']);
} catch (InvalidArgumentException $e) {
$Organizr->log('Cron')->warning('Cron schedule has failed validation', ['schedule' => $Organizr->config['autoUpdateCronSchedule']]);
$Organizr->log('Cron')->error($e);
} catch (Exception $e) {
$Organizr->log('Cron')->error($e);
}
}
// End Auto-update Cron
// Auto-backup Cron
if ($Organizr->config['autoBackupCronEnabled'] && $Organizr->config['autoBackupCronSchedule']) {
try {
$schedule = new Cron\CronExpression($Organizr->config['autoBackupCronSchedule']);
$Organizr->log('Cron')->debug('Cron schedule has passed validation', ['schedule' => $Organizr->config['autoBackupCronSchedule']]);
$scheduler->call(
function () use ($Organizr) {
$Organizr->log('Cron')->debug('Running cron job', ['function' => 'Auto-backup']);
return $Organizr->backupOrganizr();
})
->then(function ($output) use ($Organizr) {
$Organizr->log('Cron')->debug('Completed cron job', [
'output' => $output,
]);
})
->at($Organizr->config['autoBackupCronSchedule']);
} catch (InvalidArgumentException $e) {
$Organizr->log('Cron')->warning('Cron schedule has failed validation', ['schedule' => $Organizr->config['autoBackupCronSchedule']]);
$Organizr->log('Cron')->error($e);
} catch (Exception $e) {
$Organizr->log('Cron')->error($e);
}
}
// End Auto-backup Cron
// Add plugin cron
$Organizr->log('Cron')->debug('Checking if any plugins have cron jobs');
foreach ($GLOBALS['cron'] as $cronJob) {
if (isset($cronJob['enabled']) && isset($cronJob['class']) && isset($cronJob['function']) && isset($cronJob['schedule'])) {
$Organizr->log('Cron')->debug('Starting cron job for function: ' . $cronJob['function'], ['cronJob' => $cronJob]);
if ($Organizr->config[$cronJob['enabled']]) {
$Organizr->log('Cron')->debug('Checking if cron job class exists', ['cronJob' => $cronJob]);
if (class_exists($cronJob['class'])) {
$Organizr->log('Cron')->debug('Class exists', ['cronJob' => $cronJob]);
$Organizr->log('Cron')->debug('Validating cron job schedule', ['schedule' => $cronJob['schedule']]);
try {
$schedule = new Cron\CronExpression($Organizr->config[$cronJob['schedule']]);
$Organizr->log('Cron')->debug('Cron schedule has passed validation', ['schedule' => $Organizr->config[$cronJob['schedule']]]);
$plugin = new $cronJob['class']();
$function = $cronJob['function'];
$Organizr->log('Cron')->debug('Checking if cron job method exists', ['cronJob' => $cronJob]);
if (method_exists($plugin, $function)) {
$Organizr->log('Cron')->debug('Method exists', ['cronJob' => $cronJob]);
$scheduler->call(
function ($plugin, $function) use ($Organizr) {
$Organizr->log('Cron')->debug('Running cron job', ['function' => $function]);
return $plugin->$function();
}, [$plugin, $function])
->then(function ($output) use ($Organizr) {
$Organizr->log('Cron')->debug('Completed cron job', [
'output' => $output,
]);
})
->at($Organizr->config[$cronJob['schedule']]);
} else {
$Organizr->log('Cron')->warning('Method error', ['cronJob' => $cronJob['class']]);
}
} catch (InvalidArgumentException $e) {
$Organizr->log('Cron')->warning('Cron schedule has failed validation', ['schedule' => $Organizr->config[$cronJob['schedule']]]);
$Organizr->log('Cron')->error($e);
break;
} catch (Exception $e) {
$Organizr->log('Cron')->error($e);
break;
}
} else {
$Organizr->log('Cron')->warning('Class error', ['cronJob' => $cronJob['class']]);
}
} else {
$Organizr->log('Cron')->debug('Cron job is not enabled', ['cronJob' => $cronJob]);
}
} else {
$Organizr->log('Cron')->warning('Cron job was setup incorrectly', ['cronJob' => $cronJob]);
}
}
$Organizr->log('Cron')->debug('Finished processing plugin cron jobs');
/*
* Include plugin advanced cron
*/
$Organizr->log('Cron')->debug('Checking if any Plugins have advanced cron jobs');
try {
$directoryIterator = new RecursiveDirectoryIterator($Organizr->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins', FilesystemIterator::SKIP_DOTS);
$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
foreach ($iteratorIterator as $info) {
if ($info->getFilename() == 'advancedCron.php') {
require_once $info->getPathname();
}
}
} catch (UnexpectedValueException $e) {
$Organizr->log('Cron')->error($e);
}
/*
* Include custom plugin advanced cron
*/
try {
if (file_exists(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'plugins')) {
$folder = dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'plugins';
$directoryIterator = new RecursiveDirectoryIterator($folder, FilesystemIterator::SKIP_DOTS);
$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
foreach ($iteratorIterator as $info) {
if ($info->getFilename() == 'advancedCron.php') {
require_once $info->getPathname();
}
}
}
} catch (UnexpectedValueException $e) {
$Organizr->log('Cron')->error($e);
}
$Organizr->log('Cron')->debug('Finished processing advanced plugin cron jobs');
// Run cron jobs
$scheduler->run();
// Debug stuff
//$Organizr->prettyPrint($scheduler->getVerboseOutput());
//$Organizr->prettyPrint($scheduler->getFailedJobs());
$Organizr->log('Cron')->debug('Cron process completion', ['verbose' => $scheduler->getVerboseOutput()]);
if (!empty($scheduler->getFailedJobs())) {
$Organizr->log('Cron')->warning('Cron jobs have failed', ['jobs' => $scheduler->getFailedJobs(), 'verbose' => $scheduler->getVerboseOutput()]);
}
// End Run and set file with time
$Organizr->createCronFile();
} else {
if ($Organizr->hasDB()) {
$Organizr->log('Cron')->warning('Unauthorized user tried to access cron file');
die($Organizr->showHTML('Unauthorized', 'Go-on.... Git!!!'));
}
die('Unauthorized');
}