Используйте Dajax для потоковой передачи сообщений журнала

Я пытаюсь создать окно логгера для моего сайта, которое транслирует сообщения логгера python в всплывающее окно javascript. Я дошел до того, что если я закрою окно и снова открою его, будут отображаться новые сообщения, но я хочу написать некоторый javascript, который автоматически обновляет окно (и вызывает dajaxice) каждые N секунд.

Мой ajax.py:

@dajaxice_register(method='GET')
def getLogs(request):
  fname = "/path/to/LOG_2015-07-08.log"
  with open(fname,"r") as f:
    lines = f.readlines()
  lines = lines[-15:]  //
  logger.info("Displaying Logs")
  return json.dumps({'message':lines})

Мой HTML:

<script language="javascript" type="text/javascript">
  function popitup(data) {
    sessionStorage.setItem("logs",data.message);
    newWindow = window.open('/InterfaceApp/LogViewer', 'Log Viewer', 'height=400,width=800,status=yes');
    if(newWindow && !newWindow.closed){

    newWindow.location.reload(true);  //this is my first attempt at a refresh, wasn't quite what I wanted.

    newWindow.focus();
    } 
  }
</script>
<div class="container">
  <input id="LogMessages" type="button" value="View Log Messages" onclick="Dajaxice.InterfaceApp.getLogs(popitup)"/>
</div>

Чтобы повторить, я хочу нажать на кнопку и у меня появится всплывающее окно. Я хочу, чтобы это всплывающее окно обновлялось каждые N секунд с помощью последних 15 строк моего файла журнала (строки добавляются в журнал каждый раз, когда пользователь перемещается по сайту). Функция Dajaxice в ajax.py это то, что захватывает файлы журнала, так что каким-то образом вызов должен быть включен в обновление.

Кто-нибудь может мне помочь с этим? Я боролся с этим в течение нескольких дней.

Спасибо!!

1 ответ

Решение

Я смог понять это самостоятельно. Код ниже работал для меня.

ajax.py:

@dajaxice_register(method='GET')
def getLogs(request):
  fname = "/path/to/LOG_2015-07-09.log"
  with open(fname,"r") as f:
    lines = f.readlines()
  lines = lines[-15:]
  return json.dumps({'message':lines})

HTML:

 <div class="container-fluid">
  <h4 class="text-center">Log Messages</h4>
  <div class="content">
    <span class='value'></span>
  </div>
  <script language="javascript" type="text/javascript">
    function saveLogs(data){
      sessionStorage.setItem("logs",data.message);
    }
      $(document).ready(
        function() {
          setInterval(function() {
            Dajaxice.InterfaceApp.getLogs(saveLogs);
            var logs = sessionStorage.getItem("logs");
            document.querySelector('.content .value').innerText = logs;      
          }, 3000);
        });
  </script>
</div>        

Я использовал dajaxice вместо обычного ajax, с которым пришлось потрудиться, прежде чем все настройки были настроены правильно, но это оказалось проще, чем попытаться научиться интегрировать ajax и php в мой проект django.

Другие вопросы по тегам