fwrite( $etree.PHP_EOL ); $f = null; /* [3] Get the list of daemons (features) =========================================================*/ $feature = []; $f = new SplFileObject(ETREE_CONF, 'r'); while( !$f->eof() ){ /* (1) Try to parse each line */ $etree = trim($f->fgets(), "\n"); /* (2) Manage error */ if( is_null($etree) || strlen($etree) == 0 ) continue; /* (3) Add entry to log */ $feature[] = $etree; } $f = null; /* [4] Remove features' entries =========================================================*/ /* (0) We are done if @sync */ if( $sync ){ slog('Post-sync deployment -> no history truncate', "api:deploy", 'update'); return 0; } if( isset($arr_r['saved']) && is_array($arr_r['saved']) ){ foreach($arr_r['saved'] as $feat_name=>$count){ /* (2) Check history count */ if( !is_numeric($count) ){ slog("No \'history\' found for '$feat_name' in response file", 'api:deploy', 'update'); continue; } /* (3) Fetch number of entries */ $saved = intval($count); $saved = $saved < 0 ? 0 : $saved; // prevent negative /* (4) Truncate the log file */ $truncated = syscall(SOURCE_DIR."/lib/file/truncate $feat_name {$saved}"); /* (5) Manage error */ if( $truncated === false ){ slog('History cannot be truncated', "$feat_name:deploy", 'update'); continue; } slog("History succesfully truncated", "$feat_name:deploy", 'update'); } } /* [5] Launch deploy script for each feature =========================================================*/ slog('Deploying each feature', "api:deploy", 'update'); /* (1) For each feature */ foreach($feature as $feat_name){ /* (2) Check if specific data in response */ if( !isset($arr_r['feature'][$feat_name]) ){ slog("No data found for $feat_name", "api:deploy", 'update'); continue; } /* (3) Check for feature deploy script */ if( !file_exists(SOURCE_DIR."/feature/$feat_name/deploy") ){ slog("No deploy script found for $feat_name", "api:deploy", 'update'); continue; } /* (4) Write useful exclusive data to tmp file */ file_put_contents(TMP_DIR."/$feat_name", json_encode($arr_r['feature'][$feat_name])); /* (4) Execute deploy script */ $sync_suffix = $sync ? ' sync' : ''; if( syscall(SOURCE_DIR."/feature/$feat_name/deploy$sync") !== false ) slog("Successfully deployed $feat_name", 'api:deploy', 'update'); else slog("Failed deploying $feat_name", 'api:deploy', 'update'); } return 0; } /* Manage sync vs. sync */ $is_sync = false; if( $argc > 1 && $argv[1] == 'sync' ) $is_sync = true; $exec = api_deploy($is_sync); if( $exec == 0 ) slog('Success', 'api:deploy', 'update'); else slog('Failure', 'api:deploy', 'update'); echo $exec; die($exec); ?>