<?php

// Streamer Ingest Digital Content Package Monitor alias StreamerIDCP Monitor c/o Riva Stefano
// About: Remake ottimizzato del monitor di copia, richiedendo SOLO l'id del task di copia in corso come per la versione in uso nell'FTP pre-rework pure quella.

// Inizato il 20/11/2019 @ v 1.0

//include("check_session.php");

// setto il db come raggiungibile.
//$_SESSION['pingDatabase'] = 'up';

include(__DIR__ . "/db_connection.php");


if(!isset($_SERVER['argv']))
  die("ERROR_SERVER_ARGV_MISSING");

  $index_db = count( $_SERVER['argv'] ) - 2;
  $ID_TASK = $_SERVER['argv'][$index_db];


  if(!mysqli_query($db,"UPDATE dci_import_task SET Status = 'PROCESSING' WHERE ID = '".$ID_TASK."'"))
    die("ERROR_UPDATE_PROCESSING_DB");

  // prendo i dati inerenti al task in corso
  $queryGet = mysqli_query($db , "SELECT * FROM dci_import_task WHERE ID = '".$ID_TASK."'");

  if(!$assoc = mysqli_fetch_assoc($queryGet))
    die("ERROR_TASK_DB_ID");

  $folderCheck = $assoc['DestinationPath'];

  $lastWrittenStatus = 0;
  $sameSizeCounter = 0;
  $folderFoundOnce = false;

  //$size1SecondAgo = 0;

  while(1){


    if(!file_exists($folderCheck)){

      if($sameSizeCounter >= 20){

        // se il task non copia un file da 60 secondi, è in errore
        mysqli_query($db,"UPDATE dci_import_task SET Status = 'ERROR' , PID = 'DESTINATION NOT FOUND' WHERE ID = '".$ID_TASK."'");
        exit;

      }

      $sameSizeCounter++;

      sleep(10);

      continue;

    } else {

      if($folderFoundOnce == false){

        $folderFoundOnce = true;
        $sameSizeCounter = 0;

      }

    }

    // prendo il filesize
    $actual_size = foldersize($folderCheck);

    mysqli_query($db,"UPDATE dci_import_task SET Completation = '".$actual_size."' , SpeedMbs = '".( $actual_size - $lastWrittenStatus )."' WHERE ID = '".$ID_TASK."'");

    $queryCheck = mysqli_query($db , "SELECT * FROM dci_import_task WHERE ID = '".$ID_TASK."'");
    $assocCheck = mysqli_fetch_assoc($queryCheck);

    if($assocCheck['TotalSize'] <= $assocCheck['Completation']){

      mysqli_query($db,"UPDATE dci_import_task SET Status = 'COMPLETE' WHERE ID = '".$ID_TASK."'");
      exit;

    } else {

      if( $assocCheck['Completation'] == $lastWrittenStatus ) {

        if($sameSizeCounter >= 60){

          // se il task non copia un file da 60 secondi, è in errore
          mysqli_query($db,"UPDATE dci_import_task SET Status = 'ERROR' , PID = 'COPY TERMINATED' WHERE ID = '".$ID_TASK."'");
          exit;

        } else {

          $sameSizeCounter++;

        }


      } else {

        $sameSizeCounter = 0;

      }

    }

    // ultima dimensione letta
    $lastWrittenStatus = $actual_size;



    // 1 secondi di wait.
    sleep(1);



  }





    function foldersize($path) {
        $total_size = 0;
        $files = scandir($path);
        $cleanPath = rtrim($path, '/'). '/';

        foreach($files as $t) {
            if ($t<>"." && $t<>"..") {
                $currentFile = $cleanPath . $t;
                if (is_dir($currentFile)) {
                    $size = foldersize($currentFile);
                    $total_size += $size;
                }
                else {
                    $size = filesize($currentFile);
                    $total_size += $size;
                }
            }
        }

        return $total_size;

    }





?>
