Mass move to root

This commit is contained in:
magnolia-fan
2011-04-09 17:41:24 +04:00
parent 0640e2424e
commit 62ff3f277f
484 changed files with 0 additions and 3 deletions
+40
View File
@@ -0,0 +1,40 @@
#!/opt/local/bin/php
<?php
chdir('..');
require_once 'common.php';
Config::loadFile('app', 'config/app.ini');
$artist_name = $argv[1];
$db = Db::getInstance();
$a_model = Model::factory('musicbrainz', 'Artist');
$rg_model = Model::factory('musicbrainz', 'ReleaseGroup');
$r_model = Model::factory('musicbrainz', 'Release');
$t_model = Model::factory('musicbrainz', 'Track');
$artist_id = $a_model->getId($artist_name);
if (!$artist_id) {
echo "Bad artist name!\n\n\n"; die;
}
$albums = $rg_model->getArtistAlbums($artist_id);
$release_groups = $r_model->getReleases(array_keys($albums), true);
$g_tracks = array();
foreach ($release_groups as $release_group => $releases) {
$g_tracks[$release_group] = $t_model->getUniqueReleaseTracks(array_keys($releases));
}
foreach($g_tracks as $release_group => $tracks) {
$tracks = $tracks['tracks'] + $tracks['bonus'];
foreach ($tracks as $track) {
$track_id = $track['id'];
$track_title = addslashes($artist_name .' - '. $track['name']);
$track_length = $track['length'];
$q = "INSERT INTO beathaven.queue VALUES({$track_id}, 0, E'{$track_title}', {$track_length});";
echo $q."\n";
$db->q($q);
}
}
+90
View File
@@ -0,0 +1,90 @@
#!/opt/local/bin/php
<?php
require_once '/www/server/php/common.php';
$tmp = array_slice(scandir(Config::get('app:Parser:bot_stats_dir')), 2);
$bots = array();
foreach ($tmp as $bfile) {
$bots[str_replace('.json', '', $bfile)] = json_decode(file_get_contents(Config::get('app:Parser:bot_stats_dir').$bfile));
}
foreach ($bots as $name => $bot) {
$tmp = exec("ps ".$bot->pid);
$bot->active = (int) (strpos($tmp, strval($bot->pid)) !== false);
}
if (!isset($argv[1])) {
echo "Bad action\n";
die;
}
switch ($argv[1]) {
case 'add':
$bot_name = (isset($argv[2]) ? ucfirst($argv[2]) : false);
if ($bot_name && isset($bots[$bot_name])) {
$bot = $bots[$bot_name];
if($bot->active) {
echo $bot_name ." is working already\n";
} else {
echo "Launching ". $bot_name ."\n";
shell_exec(ROOT_DIR ."/bin/parser/worker_html_grabber.php ". $bot_name ." > /www/parser_data/log/". $bot_name .".log &");
}
} else {
$bots = custom_shuffle($bots);
foreach ($bots as $name => $bot) {
if (!$bot->active) {
echo "Launching ". $name ."\n";
shell_exec(ROOT_DIR ."/bin/parser/worker_html_grabber.php ". $name ." > /www/parser_data/log/". $name .".log &");
if ($bot_name != 'All') {
die;
}
sleep(1);
}
}
echo "All bots are working.\n";
}
break;
case 'retire':
$bot_name = (isset($argv[2]) ? ucfirst($argv[2]) : false);
if ($bot_name && isset($bots[$bot_name])) {
$bot = $bots[$bot_name];
if(!$bot->active) {
echo $bot_name ." is not working now\n";
} else {
echo "Stopping ". $bot_name ."\n";
shell_exec("kill ". $bot->pid);
}
} else {
$bots = custom_shuffle($bots);
foreach ($bots as $name => $bot) {
if ($bot->active) {
echo "Stopping ". $name ."\n";
shell_exec("kill ". $bot->pid);
if ($bot_name != 'All') {
die;
}
}
}
echo "All bots are stopped.\n";
}
break;
case 'list':
foreach($bots as $name => $bot) {
echo $name .': '. ($bot->active ? 'working' : 'down') ."\n";
}
break;
default:
echo "Bad action\n";
break;
}
function custom_shuffle($my_array = array()) {
$copy = array();
while (count($my_array)) {
$element = array_rand($my_array);
$copy[$element] = $my_array[$element];
unset($my_array[$element]);
}
return $copy;
}
+83
View File
@@ -0,0 +1,83 @@
#!/opt/local/bin/php
<?php
chdir('../..');
require_once 'common.php';
// Минимальный интервал между запросами
define('QUEUE_PACK', 50);
define('EMPTY_QUEUE_TIMEOUT', 60);
$bot_name = 'Chopin';
// Данные о работе бота
$stats = array(
'started_job' => time(),
'eneded_job' => time(),
'pid' => getmypid(),
'good_results' => 0,
'bad_results' => 0,
'queue_size' => 0,
'last_request' => ''
);
// Устанавливаем коннект с БД
$db = Db::getInstance();
$vk = new Vkontakte();
// Бот работает все время
while (true) {
// Получаем список песен для проверки, помечаем в очереди, что мы их взяли в работу
$db->q('BEGIN');
$queue = $db->getRows($db->q("SELECT * FROM beathaven.queue WHERE status=3 LIMIT ". QUEUE_PACK));
$ids = array();
foreach ($queue as $t) {
$ids[] = $t['track_id'];
}
$db->q('UPDATE beathaven.queue SET status=4 WHERE track_id IN('. implode(',', $ids) .')');
$db->q('COMMIT');
if (!$queue || count($queue) == 0) {
sleep(EMPTY_QUEUE_TIMEOUT);
} else {
$stats['queue_size'] = count($queue);
foreach ($queue as $t) {
$t1 = microtime(true);
echo "#{$t['track_id']} {$t['track_title']} -- ";
$html = file_get_contents(Config::get('app:Parser:good_html_dir'). $t['track_id'] .'.html');
$vk->setHtml($html);
$vk->parseHtml();
$files = $vk->getFiles();
$tmp = explode(' - ', $t['track_title']);
$artist_name = $tmp[0];
unset($tmp[0]);
$track_name = implode(' - ', $tmp);
$files = VkontakteMP3::check($files, $artist_name, $track_name, $t['track_length']);
BeatDB::set($t['track_id'], $files);
echo count($files) ."\n";
if (count($files) > 0) {
$db->q("UPDATE beathaven.queue SET status=6 WHERE track_id=". $t['track_id']);
$stats['good_results']++;
} else {
$db->q("UPDATE beathaven.queue SET status=5, times_failed = times_failed + 1 WHERE track_id=". $t['track_id']);
$stats['bad_results']++;
}
$stats['last_request'] = $t['track_title'];
$stats['queue_size']--;
$stats['eneded_job'] = time();
$bot_stats_file_name = Config::get('app:Parser:bot_stats_dir'). $bot_name .'.json';
file_put_contents($bot_stats_file_name, json_encode($stats));
chmod($bot_stats_file_name, 0777);
$t2 = microtime(true);
}
}
}
+98
View File
@@ -0,0 +1,98 @@
#!/opt/local/bin/php
<?php
// Демонизация процесса
$child_pid = pcntl_fork();
if ($child_pid == -1) {
die('Error while forking process.');
} elseif ($child_pid) {
// Выходим из родительского, привязанного к консоли, процесса
exit;
}
require_once '/www/server/php/common.php';
// Минимальный интервал между запросами
define('VKTIMEOUT', 10);
define('QUEUE_PACK', 30);
define('EMPTY_QUEUE_TIMEOUT', 60);
// Получаем имя бота
if (!isset($argv[1]) || !Config::get('bot:'. $argv[1])) {
die('Wrong bot name: '. @$argv[1]);
}
$bot_name = ucfirst($argv[1]);
// Инициализация бота по имени
$vk = new Vkontakte($bot_name);
// Данные о работе бота
$stats = array(
'started_job' => time(),
'eneded_job' => time(),
'pid' => getmypid(),
'good_results' => 0,
'bad_results' => 0,
'queue_size' => 0,
'last_request' => ''
);
// Устанавливаем коннект с БД
$db = Db::getInstance();
// Бот работает все время
while (true) {
// Получаем список песен для загрузки, помечаем в очереди, что мы их взяли в работу
$db->q('BEGIN');
$queue = $db->getRows($db->q("SELECT * FROM beathaven.queue WHERE status=0 ORDER BY priority DESC, times_failed ASC LIMIT ". QUEUE_PACK));
$ids = array();
foreach ($queue as $t) {
$ids[] = $t['track_id'];
}
$db->q('UPDATE beathaven.queue SET status=1 WHERE track_id IN('. implode(',', $ids) .')');
$db->q('COMMIT');
if (!$queue || count($queue) == 0) {
sleep(EMPTY_QUEUE_TIMEOUT);
} else {
$stats['queue_size'] = count($queue);
foreach ($queue as $t) {
$t1 = microtime(true);
echo "#{$t['track_id']} {$t['track_title']} -- ";
$ok = $vk->getTracks($t['track_title']);
if (strpos($vk->getHtml(), 'searchOffset') === false) {
echo "Session kaput!\n";
die;
}
if ($ok) {
echo "OK\n";
$db->q("UPDATE beathaven.queue SET status=3 WHERE track_id=". $t['track_id']);
$file_name = Config::get('app:Parser:good_html_dir'). $t['track_id'] .'.html';
$stats['good_results']++;
} else {
echo "FAILED\n";
$db->q("UPDATE beathaven.queue SET status = 2, times_failed = times_failed + 1 WHERE track_id=". $t['track_id']);
$file_name = Config::get('app:Parser:bad_html_dir'). $t['track_id'] .'.html';
$stats['bad_results']++;
}
file_put_contents($file_name, $vk->getHtml());
chmod($file_name, 0777);
$stats['last_request'] = $t['track_title'];
$stats['queue_size']--;
$stats['eneded_job'] = time();
$bot_stats_file_name = Config::get('app:Parser:bot_stats_dir'). $bot_name .'.json';
file_put_contents($bot_stats_file_name, json_encode($stats));
chmod($bot_stats_file_name, 0777);
$t2 = microtime(true);
if ($t2 - $t1 < VKTIMEOUT) {
sleep(ceil(VKTIMEOUT - ($t2 - $t1)));
}
}
}
}