From 39751740141e86699f84a8130fb7ef66921b077d Mon Sep 17 00:00:00 2001 From: Taylor Date: Sat, 2 Mar 2024 09:42:35 -0600 Subject: [PATCH] initial testing of reporting using playwright --- backend/app/reporting/routes/reporting.py | 27 +++++++++++ backend/app/reporting/testing.py | 55 ++++++++++++++--------- backend/app/routers/reporting.py | 4 +- 3 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 backend/app/reporting/routes/reporting.py diff --git a/backend/app/reporting/routes/reporting.py b/backend/app/reporting/routes/reporting.py new file mode 100644 index 00000000..52a1c70f --- /dev/null +++ b/backend/app/reporting/routes/reporting.py @@ -0,0 +1,27 @@ + +from loguru import logger + + +import asyncio +from playwright.async_api import async_playwright + +from fastapi import APIRouter +from fastapi import Depends +from concurrent.futures import ProcessPoolExecutor +import multiprocessing +from app.db.db_session import get_db +from sqlalchemy.ext.asyncio import AsyncSession +from app.reporting.testing import generate_report + +report_generation_router = APIRouter() + + +@report_generation_router.post( + "/generate-report", + description="Create a new report.", +) +async def create_report(session: AsyncSession = Depends(get_db)): + logger.info("Generating report") + await generate_report() + return {"message": "Report generation started."} + diff --git a/backend/app/reporting/testing.py b/backend/app/reporting/testing.py index cc2fcb8b..c8e6945e 100644 --- a/backend/app/reporting/testing.py +++ b/backend/app/reporting/testing.py @@ -1,27 +1,42 @@ import asyncio from playwright.async_api import async_playwright -from playwright.sync_api import sync_playwright -from fastapi import APIRouter -from fastapi import Depends -from fastapi import HTTPException -from app.middleware.license import verify_license_key -from app.db.db_session import get_db -from sqlalchemy.ext.asyncio import AsyncSession +from loguru import logger -reporting_router = APIRouter() - -@reporting_router.post( - "/generate_report", - description="Generate a report", -) -async def main(session: AsyncSession = Depends(get_db)): - await verify_license_key(session) +async def generate_report(): + logger.info("Generating report") async with async_playwright() as p: - for browser_type in [p.chromium, p.firefox, p.webkit]: - browser = await browser_type.launch() + urls = [ + 'http://ashdevcopilot01.socfortress.local:3000/d-solo/ab9bab2c-5d86-43e7-bac2-c1d68fc91342/huntress-summary?orgId=1&from=1708725633941&to=1709330433941&panelId=5', + 'http://ashdevcopilot01.socfortress.local:3000/d-solo/ab9bab2c-5d86-43e7-bac2-c1d68fc91342/huntress-summary?orgId=1&from=1708725654862&to=1709330454862&panelId=1', + 'http://ashdevcopilot01.socfortress.local:3000/d-solo/a1891b09-fba9-498e-807e-1ad774c8557f/sap-users-auth?orgId=44&from=1709303384274&to=1709389784274&panelId=43', + 'http://ashdevcopilot01.socfortress.local:3000/d-solo/ab9bab2c-5d86-43e7-bac2-c1d68fc91342/huntress-summary?orgId=1&from=1706799780600&to=1709391780600&panelId=10' + # Add more URLs here + ] + for browser_type in [p.chromium]: + browser = await browser_type.launch(headless=False) page = await browser.new_page() - await page.goto('http://playwright.dev') - await page.screenshot(path=f'example-{browser_type.name}.png') + # Navigate to the login page + await page.goto('http://ashdevcopilot01.socfortress.local:3000/login') + # Enter the username and password + await page.fill('input[name="user"]', 'admin') + await page.fill('input[name="password"]', 'socfortress') + # Click the login button + await page.click('button[data-testid="data-testid Login button"]') + # Wait for navigation to complete + await page.wait_for_load_state(state='networkidle') + # Check if login was successful by checking for an element that is only visible when logged in + body_class = await page.evaluate('document.body.className') + if 'app-grafana no-overlay-scrollbar page-dashboard' in body_class: + print("Login successful") + else: + print("Login failed") + await browser.close() + return + for url in urls: + await page.goto(url) + #await asyncio.sleep(15) + await page.wait_for_load_state(state='networkidle') + await page.screenshot(path=f'example-{browser_type.name}-{urls.index(url)}.png') await browser.close() - return {"message": "Report generated"} + diff --git a/backend/app/routers/reporting.py b/backend/app/routers/reporting.py index fbd497e2..8fa862ed 100644 --- a/backend/app/routers/reporting.py +++ b/backend/app/routers/reporting.py @@ -1,13 +1,13 @@ from fastapi import APIRouter -from app.reporting.testing import reporting_router +from app.reporting.routes.reporting import report_generation_router # Instantiate the APIRouter router = APIRouter() # Include the reporting related routes router.include_router( - reporting_router, + report_generation_router, prefix="/reporting", tags=["Reporting"], )