Потоковая передача файлов log.txt на веб-страницу с использованием JavaScript. После удаления файлов журнала текстовый поток ненадолго уходит, а потом возвращается - PullRequest
0 голосов
/ 29 сентября 2019

Я создал очень простую страницу монитора фермы рендеринга для After Effects, используя сочетание действий MacOS Automator, некоторых текстовых файлов журнала, некоторого JavaScript и некоторых php.

Действие Automator принимает выбранныйФайл проекта After Effects и запускает для него команду aerender несколько раз (по одному для каждого ядра ЦП) и выводит серию отфильтрованных текстовых файлов (по одному для каждого экземпляра aerender), отправляя по трубопроводу grep --line-buffered и просматривая только определенные строки (например,«Начало | Закончено | Общее время истекло». Эта часть работает нормально.

У меня есть простая html-страница, которая отслеживает эти файлы журнала в режиме реального времени и передает их на страницу, используя javascript…

<!DOCTYPE html>

<html>
 <head>
  <title>Render Barn</title>
  <meta http-equiv="Cache-control" content="no-cache">
  <meta http-equiv="Expires" content="-1">

  <style>
  body {
    background-color: black;
    color: #00ff00;
    font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace; 
    font-size: 10px; 
    font-style: bold;
    white-space: pre-wrap;
    }
  </style>

  <script language="JavaScript" src="https://code.jquery.com/jquery-3.4.1.js"></script>
  <script type="text/javascript">
        window.setInterval(function(){
        $.get('./Render_Barn_1.txt',
            function(data){
                $('#Render_Barn_1').html(data);
            }
        );
            $.get('./Render_Barn_2.txt',
                function(data){
                    $('#Render_Barn_2').html(data);
                }
            );
            $.get('./Render_Barn_3.txt',
                function(data){
                    $('#Render_Barn_3').html(data);
                }
            );
            $.get('./Render_Barn_4.txt',
                function(data){
                    $('#Render_Barn_4').html(data);
                }
            );
            $.get('./Render_Barn_5.txt',
                function(data){
                    $('#Render_Barn_5').html(data);
                }
            );
            $.get('./Render_Barn_6.txt',
                function(data){
                    $('#Render_Barn_6').html(data);
                }
            );
        },1000);
  </script>

    <script type="text/javascript"> // Delete Logs button
        $(document).ready(function(){
            $('.button').click(function(){
                var clickBtnValue = $(this).val();
                var ajaxurl = 'delete_logs.php',
                data =  {'action': clickBtnValue};
                $.post(ajaxurl, data, function (response) {
                });
            });
        });
        </script>

 </head>

 <body>
<b>Render Barn CPU 1</b>
<div id="Render_Barn_1"></div>
<br>
<b>Render Barn CPU 2</b>
<div id="Render_Barn_2"></div>
<br>
<b>Render Barn CPU 3</b>
<div id="Render_Barn_3"></div>
<br>
<b>Render Barn CPU 4</b>
<div id="Render_Barn_4"></div>
<br>
<b>Render Barn CPU 5</b>
<div id="Render_Barn_5"></div>
<br>
<b>Render Barn CPU 6</b>
<div id="Render_Barn_6"></div>

<input type="submit" class="button" value="Delete Logs" onClick="refreshPage()"/>

<script type="text/javascript"> // Refresh Page after deleting logs
function refreshPage(){
    window.location.reload(true);
} 
</script>

</body>
</html>

delete_logs.php У меня также есть ссылка на php, которая удаляет файлы журнала с помощью кнопки на веб-странице…

 <?php
     if (isset($_POST['action'])) {
         switch ($_POST['action']) {

             case 'Delete Logs':
                 delete();
                 break;
         }
     }

     function delete() {
         echo shell_exec('rm /Users/server/Logs/Render_Barn_*.txt');
         exit;
     }

 ?>

Render_Barn_1.txt Это пример одного из файлов журнала…

PROGRESS:  9/29/19 4:37:39 AM PDT: Starting composition 163 Ralph Sled Across America MP v4.
PROGRESS:  9/29/19 4:39:22 AM PDT: Finished composition 163 Ralph Sled Across America MP v4.
PROGRESS:  Total Time Elapsed: 1 Min, 44 Sec

Снимок экрана веб-страницы в действии Как видите, все работаетотлично… до тех пор, пока я не удаляю логи (используя кнопку или сам Finder). Страница ненадолго обновится, на ней не будет отображаться логов, но затем снова появятся логи «зомби». Я говорю «зомби», потому что они как-то возвращаются из мертвых. В папке журналов просто ничего . Мой javascript для обновления страницы явно не выполняет всю работу.

Не работает принудительное обновление в браузере. Единственный способ заставить его обновиться правильно - это удалить кеш браузера. Есть идеи, где я ошибся?

РЕДАКТИРОВАТЬ -

Я также только что попробовал это (и вариант с $(".log_output").empty();), что снова заставило их ненадолго исчезнуть, но они возвращаются ...

<b>Render Barn CPU 1</b>
<div class="log_output" id="Render_Barn_1"></div>
<br>
<b>Render Barn CPU 2</b>
<div class="log_output" id="Render_Barn_2"></div>
<br>
<b>Render Barn CPU 3</b>
<div class="log_output" id="Render_Barn_3"></div>
<br>
<b>Render Barn CPU 4</b>
<div class="log_output" id="Render_Barn_4"></div>
<br>
<b>Render Barn CPU 5</b>
<div class="log_output" id="Render_Barn_5"></div>
<br>
<b>Render Barn CPU 6</b>
<div class="log_output" id="Render_Barn_6"></div>

<input id="delete_logs" type="submit" class="button" value="Delete Logs" onClick="refreshPage()"/>

<script type="text/javascript">
function refreshPage(){
    $(".log_output").html("");
} 
</script>

Кроме того, $(".log_output").remove() работает , но это слишком тяжело, так как удаляет класс, не вызывая дальнейших обновлений. И как только я обновлю страницу, все журналы зомби вернутся снова. Также попытался удалить PHP, который не имел никакого значения. Я предполагаю, что .get … function(data) как-то как-то держится за старые данные?

...