pandorafms/pandora_console/extensions/update_pandora/functions.ajax.php

234 lines
7.1 KiB
PHP

<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; version 2
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
function update_pandora_get_packages_online_ajax() {
global $config;
$last = get_parameter('last', 0);
//TODO Make all code, at the moment I uknown the method to get list.
global $conf_update_pandora;
if (empty($conf_update_pandora))
$conf_update_pandora = update_pandora_get_conf();
$conf_update_pandora['last_contact'] = time();
update_pandora_update_conf();
$last++;
sleep(1);
$return = array('correct' => 0);
$return['last'] = $last;
$return['correct'] = 1;
$return['package'] = uniqid();
$return['end'] = 0;
if ($last == 1) {
$return['end'] = 1;
}
echo json_encode($return);
////////////////////////////////////////////////////////////////////
}
function update_pandora_download_package() {
global $config;
$dir = $config['attachment_store'] . '/update_pandora/';
$package = get_parameter('package', '');
//TODO Make all code, at the moment.
$url = 'http://sourceforge.net/projects/pandora/files/Pandora%20FMS%204.0.1/Pandora_FMS_4.0.1_OpenSource.i686-0.0.3.vmx.tar.gz/download';
$url = 'http://sourceforge.net/projects/pandora/files/Nightly/Tarball/pandorafms_console-4.1dev-120330.tar.gz/download';
$url = 'http://sourceforge.net/projects/pandora/files/Nightly/Tarball/pandorafms_server-4.1dev-120330.tar.gz/download';
preg_match_all('/Tarball\/(.*.tar.gz)/i', $url, $targz);
$targz = $targz[1][0];
$url = 'http://127.0.0.1/test000.tar.gz';
$url = 'http://127.0.0.1/test001.tar.gz';
$targz = 'test001.tar.gz';
////////////////////////////////////////////////////////////////////
$file = fopen($dir . $targz, "w");
$mch = curl_multi_init();
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_FILE, $file);
curl_multi_add_handle($mch ,$c);
$running = null;
do {
curl_multi_exec($mch ,$running);
$info = curl_getinfo ($c);
$data = array();
$data['filename'] = $targz;
$data['size'] = $info['download_content_length'];
$data['size_download'] = $info['size_download'];
$data['speed_download'] = $info['speed_download'];
$info_json = json_encode($data);
file_put_contents('/tmp/' . $package . '.info.txt', $info_json, LOCK_EX);
sleep(1);
}
while($running > 0);
$return = array('correct' => 1);
echo json_encode($return);
}
function update_pandora_check_download_package() {
global $config;
require_once ($config["homedir"] . '/include/functions_graph.php');
sleep(1);
$package = get_parameter('package', '');
$return = array('correct' => 1,
'info_download' => "<b>Size:</b> %s/%s bytes <b>Speed:</b> %s bytes/second",
'progres_bar' => progress_bar(0, 300, 20, '0%', 1, false, "#00ff00"),
'progres_bar_text' => '0%',
'percent' => 0);
$info_json = @file_get_contents('/tmp/' . $package . '.info.txt');
$info = json_decode($info_json, true);
$percent = 0;
$size_download = 0;
$size = 0;
$speed_download = 0;
if ($info['size_download'] > 0) {
$percent = format_numeric(
($info['size_download'] / $info['size']) * 100, 2);
$return['percent'] = $percent;
$size_download = $info['size_download'];
$size = $info['size'];
$speed_download = $info['speed_download'];
$return['info_download'] = sprintf($return['info_download'],
format_for_graph($size_download, 2), format_for_graph($size, 2),
format_for_graph($speed_download, 2));
}
else {
$return['info_download'] = __('<b>Starting: </b> connect to server');
}
$img = progress_bar($percent, 300, 20, $percent . '%', 1, false, "#00ff00");
$return['progres_bar'] = $img;
preg_match_all('/src=[\'\"]([^\"^\']*)[\'\"]/i', $img, $attr);
$return['progres_bar_src'] = $attr[1];
preg_match_all('/alt=[\'\"]([^\"^\']*)[\'\"]/i', $img, $attr);
$return['progres_bar_alt'] = $attr[1];
preg_match_all('/title=[\'\"]([^\"^\']*)[\'\"]/i', $img, $attr);
$return['progres_bar_title'] = $attr[1];
$return['filename'] = $info['filename'];
echo json_encode($return);
}
function update_pandora_install_package() {
global $config;
global $conf_update_pandora;
if (empty($conf_update_pandora))
$conf_update_pandora = update_pandora_get_conf();
$dir = $config['attachment_store'] . '/update_pandora/';
$package = get_parameter('package', '');
$filename = get_parameter('filename', '');
//Get total files
$command = 'tar tzvf ' . $dir . $filename . '| wc -l > /tmp/' . $package . '.info.txt';
exec($command, $output, $status);
html_debug_print($command, true);
$command = 'tar xzvf ' . $dir . $filename . ' -C ' . $config['homedir'] . ' 1>/tmp/' . $package . '.files.info.txt';
html_debug_print($command, true);
//Maybe this line run for seconds or minutes
exec($command, $output, $status);
if (($status == 0) || ($status == 2)) {
$conf_update_pandora['last_installed'] = $filename;
update_pandora_update_conf();
echo json_encode(array('correct' => 1));
}
else {
echo json_encode(array('correct' => 0));
}
}
function update_pandora_check_install_package() {
global $config;
require_once ($config["homedir"] . '/include/functions_graph.php');
sleep(1);
$package = get_parameter('package', '');
$filename = get_parameter('filename', '');
//TODO MAYBE THE FILE OF FILES DON'T EXIST AT THE MOMENT
$files = @file('/tmp/' . $package . '.files.info.txt');
if (empty($files))
$files = array();
$total = (int)file_get_contents('/tmp/' . $package . '.info.txt');
$return = array('correct' => 1,
'info' => "<div id='list_files_install'
style='text-align: left; margin: 10px; padding: 5px; width: 90%%; height: 100px;
overflow: scroll; border: 1px solid #666'>%s</div>",
'src' => progress_bar(0, 300, 20, '0%', 1, false, "#0000ff"),
'alt' => '0%',
'percent' => 0);
$percent = 0;
if ((count($files) > 0) && ($total > 0)) {
$percent = format_numeric((count($files) / $total) * 100, 2);
if ($percent > 100)
$percent = 100;
}
$files_txtbox = (string)implode("<br />", $files);
$return['info'] = sprintf($return['info'], $files_txtbox);
$img = progress_bar($percent, 300, 20, $percent . '%', 1, false, "#0000ff");
$return['percent'] = $percent;
preg_match_all('/src=[\'\"]([^\"^\']*)[\'\"]/i', $img, $attr);
$return['src'] = $attr[1];
preg_match_all('/alt=[\'\"]([^\"^\']*)[\'\"]/i', $img, $attr);
$return['alt'] = $attr[1];
preg_match_all('/title=[\'\"]([^\"^\']*)[\'\"]/i', $img, $attr);
$return['title'] = $attr[1];
if ($percent == 100) {
unlink('/tmp/' . $package . '.files.info.txt');
unlink('/tmp/' . $package . '.info.txt');
}
echo json_encode($return);
}
?>