402 def SetLogCounters(self, log_count): |
402 def SetLogCounters(self, log_count): |
403 new_messages = [] |
403 new_messages = [] |
404 for level, count, prev in zip(xrange(LogLevelsCount), log_count, self.previous_log_count): |
404 for level, count, prev in zip(xrange(LogLevelsCount), log_count, self.previous_log_count): |
405 if count is not None and prev != count: |
405 if count is not None and prev != count: |
406 if prev is None: |
406 if prev is None: |
407 dump_end = -1 |
407 dump_end = max(-1, count - 10) |
|
408 oldest_message = (-1, None) |
408 else: |
409 else: |
409 dump_end = prev - 1 |
410 dump_end = prev - 1 |
410 for msgidx in xrange(count-1, dump_end,-1): |
411 for msgidx in xrange(count-1, dump_end,-1): |
411 new_message = self.GetLogMessageFromSource(msgidx, level) |
412 new_message = self.GetLogMessageFromSource(msgidx, level) |
412 if new_message is None: |
413 if new_message is None: |
|
414 if prev is None: |
|
415 oldest_message = (-1, None) |
413 break |
416 break |
414 if prev is None: |
417 if prev is None: |
415 self.OldestMessages.append((msgidx, new_message)) |
418 oldest_message = (msgidx, new_message) |
416 if len(new_messages) == 0: |
419 if len(new_messages) == 0: |
417 new_messages = [new_message] |
420 new_messages = [new_message] |
418 else: |
421 else: |
419 new_messages.insert(0, new_message) |
422 new_messages.insert(0, new_message) |
420 else: |
423 else: |
421 new_messages.insert(0, new_message) |
424 new_messages.insert(0, new_message) |
422 if prev is None and len(self.OldestMessages) <= level: |
425 if prev is None and len(self.OldestMessages) <= level: |
423 self.OldestMessages.append((-1, None)) |
426 self.OldestMessages.append(oldest_message) |
424 self.previous_log_count[level] = count |
427 self.previous_log_count[level] = count |
425 new_messages.sort() |
428 new_messages.sort() |
426 if len(new_messages) > 0: |
429 if len(new_messages) > 0: |
427 self.HasNewData = True |
430 self.HasNewData = True |
428 if self.CurrentMessage is not None: |
431 if self.CurrentMessage is not None: |
468 if self.FilterLogMessage(message, timestamp): |
471 if self.FilterLogMessage(message, timestamp): |
469 return message, msgidx - 1 |
472 return message, msgidx - 1 |
470 msgidx -= 1 |
473 msgidx -= 1 |
471 if len(self.LogMessages) > 0: |
474 if len(self.LogMessages) > 0: |
472 message = self.LogMessages[0] |
475 message = self.LogMessages[0] |
|
476 for idx, msg in self.OldestMessages: |
|
477 if msg is not None and msg > message: |
|
478 message = msg |
473 while message is not None: |
479 while message is not None: |
474 level = message.Level |
480 level = message.Level |
475 oldest_msgidx, oldest_message = self.OldestMessages[level] |
481 oldest_msgidx, oldest_message = self.OldestMessages[level] |
476 if oldest_msgidx > 0: |
482 if oldest_msgidx > 0: |
477 old_message = self.GetLogMessageFromSource(oldest_msgidx - 1, level) |
483 message = self.GetLogMessageFromSource(oldest_msgidx - 1, level) |
478 if old_message is not None: |
484 if message is not None: |
479 self.OldestMessages[level] = (oldest_msgidx - 1, old_message) |
485 self.OldestMessages[level] = (oldest_msgidx - 1, message) |
480 else: |
486 else: |
481 self.OldestMessages[level] = (-1, None) |
487 self.OldestMessages[level] = (-1, None) |
482 else: |
488 else: |
|
489 message = None |
483 self.OldestMessages[level] = (-1, None) |
490 self.OldestMessages[level] = (-1, None) |
484 message = None |
491 if message is not None: |
|
492 message_idx = 0 |
|
493 while (message_idx < len(self.LogMessages) and |
|
494 self.LogMessages[message_idx] < message): |
|
495 message_idx += 1 |
|
496 if len(self.LogMessages) > 0: |
|
497 current_message = self.LogMessages[self.CurrentMessage] |
|
498 else: |
|
499 current_message = message |
|
500 self.LogMessages.insert(message_idx, message) |
|
501 self.LogMessagesTimestamp = numpy.insert( |
|
502 self.LogMessagesTimestamp, |
|
503 [message_idx], |
|
504 [message.Timestamp]) |
|
505 self.CurrentMessage = self.LogMessages.index(current_message) |
|
506 if message_idx == 0 and self.FilterLogMessage(message, timestamp): |
|
507 return message, 0 |
485 for idx, msg in self.OldestMessages: |
508 for idx, msg in self.OldestMessages: |
486 if msg is not None and (message is None or msg > message): |
509 if msg is not None and (message is None or msg > message): |
487 message = msg |
510 message = msg |
488 if message is not None: |
|
489 self.LogMessages.insert(0, message) |
|
490 self.LogMessagesTimestamp = numpy.insert(self.LogMessagesTimestamp, [0], [message.Timestamp]) |
|
491 if self.CurrentMessage is not None: |
|
492 self.CurrentMessage += 1 |
|
493 else: |
|
494 self.CurrentMessage = 0 |
|
495 if self.FilterLogMessage(message, timestamp): |
|
496 return message, 0 |
|
497 return None, None |
511 return None, None |
498 |
512 |
499 def RefreshNewData(self, *args, **kwargs): |
513 def RefreshNewData(self, *args, **kwargs): |
500 if self.HasNewData: |
514 if self.HasNewData: |
501 self.HasNewData = False |
515 self.HasNewData = False |