function FAILED_INJECT($faildir, $backupdir)
{
    $unix = new unix();
    $files = $unix->DirFiles($faildir);
    $backupdir = "{$GLOBALS["LogFileDeamonLogDir"]}/failed-backup-longtime";
    @mkdir($backupdir, 0755, true);
    $q = new influx();
    while (list($basename, $subarray) = each($files)) {
        if ($unix->file_time_min("{$faildir}/{$basename}") > 240) {
            $unix->compress("{$faildir}/{$basename}", "{$backupdir}/" . basename($faildir) . "-{$basename}.gz");
            events("FAILED TO INJECT {$faildir}/{$basename} TIMEOUT save it to : {$backupdir}");
            @unlink("{$faildir}/{$basename}");
            continue;
        }
        $size = @filesize("{$faildir}/{$basename}");
        if ($size == 0) {
            @unlink("{$faildir}/{$basename}");
            continue;
        }
        if (!$q->files_inject("{$faildir}/{$basename}")) {
            events("FAILED TO INJECT {$faildir}/{$basename} (aborting) {$size}bytes");
            continue;
        }
        events("SUCCESS TO INJECT {$faildir}/{$basename}");
        @copy("{$faildir}/{$basename}", "{$backupdir}/{$basename}");
        @unlink("{$faildir}/{$basename}");
    }
}
function ExplodeFile($filepath, $md5file = null)
{
    $unix = new unix();
    $LastScannLine = 0;
    $GLOBALS["MYSQL_CATZ"] = new mysql_catz();
    $GLOBALS["SQUID_FAMILY_CLASS"] = new squid_familysite();
    if (!isset($GLOBALS["MYHOSTNAME"])) {
        $unix = new unix();
        $GLOBALS["MYHOSTNAME"] = $unix->hostname_g();
    }
    $GLOBALS["SEQUENCE"] = md5_file($filepath);
    if (!is_file("{$filepath}.last")) {
        if (is_file("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log")) {
            $influx = new influx();
            if ($influx->files_inject("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log")) {
                @unlink("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log");
                return true;
            }
        }
    }
    $handle = @fopen($filepath, "r");
    if (!$handle) {
        echo "Fopen failed on {$filepath}\n";
        if ($md5file != null) {
            mysql_progress($md5file, 100, 3, "Fopen {failed} on {$filepath}");
        }
        return false;
    }
    $countlines = 0;
    if ($md5file != null) {
        $countlines = $unix->COUNT_LINES_OF_FILE($filepath);
        if ($md5file != null) {
            mysql_progress($md5file, 10, 0, "Parsing {$countlines}");
        }
    }
    if (is_file("{$filepath}.last")) {
        $LastScannLine = intval(@file_get_contents("{$filepath}.last"));
    }
    $c = 0;
    $d = 0;
    $e = 0;
    $prc = 0;
    $prc_text = 0;
    $mysql_first_time = 0;
    if ($LastScannLine > 0) {
        fseek($handle, $LastScannLine, SEEK_SET);
    }
    while (!feof($handle)) {
        $c++;
        $d++;
        $e++;
        if ($countlines > 0) {
            $prc = $c / $countlines;
            $prc = round($prc * 100);
            if (!isset($GLOBALS["LAST_PRC"])) {
                if ($GLOBALS["PROGRESS"]) {
                    echo "{$prc}%\n";
                }
                $GLOBALS["LAST_PRC"] = $prc;
            } else {
                if ($GLOBALS["LAST_PRC"] != $prc) {
                    if ($GLOBALS["PROGRESS"]) {
                        echo "{$prc}%\n";
                    }
                    $GLOBALS["LAST_PRC"] = $prc;
                }
            }
            if ($prc > 10) {
                if ($prc < 99) {
                    if ($prc > $prc_text) {
                        $array_load = sys_getloadavg();
                        $internal_load = $array_load[0];
                        $mem = round(memory_get_usage() / 1024 / 1000, 2);
                        $prc_design = FormatNumber($c) . "/" . FormatNumber($countlines);
                        if ($md5file != null) {
                            mysql_progress($md5file, $prc, 1, "{parsing} {$prc_design} {load}:{$internal_load} {memory}:{$mem}MB");
                        }
                        $prc_text = $prc;
                    }
                }
            }
        }
        if ($d > 50) {
            $iSeek = ftell($handle);
            @file_put_contents("{$filepath}.last", $iSeek);
            if ($GLOBALS["VERBOSE"]) {
                $prc_design = FormatNumber($c) . "/" . FormatNumber($countlines);
                echo "{$prc}% {$prc_design}\n";
            }
            $d = 0;
        }
        if ($e > 500) {
            $mem = round(memory_get_usage() / 1024 / 1000, 2);
            $prc_design = FormatNumber($c) . "/" . FormatNumber($countlines);
            if ($md5file != null) {
                mysql_progress($md5file, $prc, 1, "{parsing} {$prc_design} {load}:{$internal_load} {memory}:{$mem}MB");
            }
            $e = 0;
        }
        $buffer = trim(fgets($handle));
        if ($buffer == null) {
            continue;
        }
        $array = parseAccessLine($buffer);
        if (count($array) == 0) {
            continue;
        }
        if ($mysql_first_time == 0) {
            if (date("Y", $array["TIME"]) > 2001) {
                $mysql_first_time = $array["TIME"];
                mysql_first_time($md5file, $mysql_first_time);
            }
        }
        CachedSizeMem($array["TIME"], $array["CACHED"], $array["SIZE"]);
        if (intval($array["SIZE"]) == 0) {
            if ($GLOBALS["VERBOSE"]) {
                echo "Size = 0 " . __LINE__ . "\n";
            }
        }
        CachedUserMem($array["TIME"], $array["SITENAME"], $array["SIZE"], null, $array["UID"], $array["IPADDR"], $array["CATEGORY"], $array["FAMILYSITE"]);
    }
    @unlink("{$filepath}.last");
    mysql_last_time($md5file, $array["TIME"]);
    CachedUserMem_dump();
    CachedSizeMem_dump();
    $influx = new influx();
    $size = filesize("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log");
    $size = $size / 1024;
    $size = $size / 1024;
    echo "Importing {$size}MB of data....\n";
    if (!$influx->files_inject("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log")) {
        @unlink("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log");
        return false;
    }
    @unlink("/home/artica/import-temp/{$GLOBALS["SEQUENCE"]}.working.log");
    return true;
}
function FAILED_INJECT($faildir, $backupdir)
{
    $unix = new unix();
    $files = $unix->DirFiles($faildir);
    $backupdir = "{$GLOBALS["LogFileDeamonLogDir"]}/failed-backup-longtime";
    @mkdir($backupdir, 0755, true);
    $q = new influx();
    while (list($basename, $subarray) = each($files)) {
        if ($unix->file_time_min("{$faildir}/{$basename}") > 240) {
            $unix->compress("{$faildir}/{$basename}", "{$backupdir}/" . basename($faildir) . "-{$basename}.gz");
            @unlink("{$faildir}/{$basename}");
            continue;
        }
        if (!$q->files_inject("{$faildir}/{$basename}")) {
            events("FAILED TO INJECT {$faildir}/{$basename}");
            continue;
        }
        echo __FUNCTION__ . " SUCCESS TO INJECT {$faildir}/{$basename}\n";
        @copy("{$faildir}/{$basename}", "{$backupdir}/{$basename}");
        @unlink("{$faildir}/{$basename}");
    }
}