Documentação Técnica

O BP - LoadForge foi desenvolvido com uma filosofia "No-Boilerplate". Ao contrário de soluções baseadas em construtores visuais (No-Code), esta aplicação foi escrita 100% "à mão" para garantir performance máxima no navegador e controle total sobre a geração de scripts Python.

Esta documentação visa expor as decisões de arquitetura e trechos do código-fonte para fins de revisão técnica e auditoria.


Arquitetura

Utilizamos uma abordagem híbrida. A interface é uma SPA (Single Page Application) para reatividade instantânea, apoiada por um backend PHP leve apenas para persistência de dados.

Frontend Stack

  • HTML5 Semântico
  • Tailwind CSS (Styling)
  • Alpine.js (Reatividade)
  • Vanilla JS (Core Logic)

Backend Stack

  • PHP 8.1+
  • PDO (Database Abstraction)
  • MySQL (Relational DB)
  • REST API (JSON)

O Motor Gerador (Vanilla JS)

A geração do código Python não depende do servidor. Criamos um objeto `LocustGenerator` puro que recebe um JSON de configuração e compila a string final. Isso garante latência zero.

assets/js/locust_gen.js
const LocustGenerator = {
    generate(config) {
        // Mapeia as tarefas visuais para funções Python decoradas
        const tasksCode = config.tasks.map((task, index) => {
            const method = task.method.toLowerCase(); 
            
            return `    @task(${task.weight})
    def task_${index + 1}(self):
        self.client.${method}("${task.endpoint}")`;
        }).join('\n\n');

        // Retorna a classe completa do Locust
        return `from locust import HttpUser, task, between
class LoadTestUser(HttpUser):
    wait_time = between(${config.min_wait}, ${config.max_wait})
    host = "${config.host}"
    
${tasksCode}`;
    }
};

Segurança e Dados

Para a funcionalidade de "Compartilhamento de Link", optamos por não usar autenticação pesada. Em vez disso, geramos hashes únicos e usamos PDO com Prepared Statements para evitar SQL Injection, mesmo sendo uma ferramenta interna.

api/save_config.php (Trecho)
// Prevenção de SQL Injection via PDO
$stmt = $pdo->prepare("INSERT INTO scenarios (share_uuid, config_json) VALUES (:uuid, :json)");

try {
    $stmt->execute([
        ':uuid' => $shortId,       // ID gerado no backend (ex: aB3x9Z)
        ':json' => json_encode($input) // Payload validado
    ]);
    // ...
} catch (PDOException $e) {
    // Tratamento de erro silencioso para o cliente
    error_log($e->getMessage());
}