File indexing completed on 2026-04-27 07:41:42
0001 from django.test import TestCase
0002 from django.urls import reverse
0003 from django.contrib.auth.models import User
0004 from django.utils import timezone
0005 from rest_framework.test import APITestCase, APIClient
0006 from rest_framework import status
0007 from monitor_app.models import SystemAgent, AppLog, Run, StfFile, Subscriber
0008 from monitor_app.serializers import AppLogSerializer
0009 from django.core.management import call_command
0010 from io import StringIO
0011 import logging
0012 import uuid
0013 import re
0014
0015
0016 class LogSummaryAPITests(TestCase):
0017 def setUp(self):
0018
0019 self.username = f"testuser_{uuid.uuid4()}"
0020 self.user = User.objects.create_user(username=self.username, password="testpass")
0021 self.client.login(username=self.username, password="testpass")
0022 now = timezone.now()
0023
0024 AppLog.objects.create(app_name='app1', instance_name='inst1', timestamp=now, level=logging.ERROR, levelname='ERROR', message='Error 1', module='mod', funcname='f', lineno=1, process=1, thread=1)
0025 AppLog.objects.create(app_name='app1', instance_name='inst1', timestamp=now, level=logging.INFO, levelname='INFO', message='Info 1', module='mod', funcname='f', lineno=2, process=1, thread=1)
0026 AppLog.objects.create(app_name='app1', instance_name='inst2', timestamp=now, level=logging.ERROR, levelname='ERROR', message='Error 2', module='mod', funcname='f', lineno=3, process=1, thread=1)
0027 AppLog.objects.create(app_name='app2', instance_name='inst3', timestamp=now, level=logging.CRITICAL, levelname='CRITICAL', message='Critical 1', module='mod', funcname='f', lineno=4, process=1, thread=1)
0028
0029 def tearDown(self):
0030
0031 User.objects.filter(username=self.username).delete()
0032
0033 def test_summary_api(self):
0034 url = '/api/logs/summary/'
0035 response = self.client.get(url)
0036 self.assertEqual(response.status_code, status.HTTP_200_OK)
0037 data = response.json()
0038 self.assertIn('app1', data)
0039 self.assertIn('app2', data)
0040 self.assertIn('inst1', data['app1'])
0041 self.assertIn('inst2', data['app1'])
0042 self.assertIn('inst3', data['app2'])
0043
0044 self.assertEqual(data['app1']['inst1']['error_counts'].get('ERROR', 0), 1)
0045 self.assertEqual(data['app1']['inst2']['error_counts'].get('ERROR', 0), 1)
0046 self.assertEqual(data['app2']['inst3']['error_counts'].get('CRITICAL', 0), 1)
0047
0048 self.assertTrue(isinstance(data['app1']['inst1']['recent_errors'], list))