133 lines
3.7 KiB
Go
133 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
baseURL := "http://localhost:8080"
|
|
username := "admin"
|
|
password := "admin"
|
|
|
|
// Erstelle Basic Auth Header
|
|
auth := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", username, password)))
|
|
|
|
// Verschiedene Aktionen und Ressourcen für realistische Testdaten
|
|
actions := []string{"CREATE", "UPDATE", "DELETE", "UPLOAD", "SIGN", "ENABLE", "DISABLE"}
|
|
resourceTypes := []string{"user", "space", "fqdn", "csr", "provider", "certificate"}
|
|
usernames := []string{"admin", "user1", "user2", "operator", "manager"}
|
|
|
|
fmt.Printf("Generiere 3000 Test-Audit-Logs...\n")
|
|
|
|
client := &http.Client{
|
|
Timeout: 30 * time.Second,
|
|
}
|
|
|
|
successCount := 0
|
|
errorCount := 0
|
|
|
|
for i := 0; i < 3000; i++ {
|
|
// Wähle zufällige Werte für realistische Testdaten
|
|
action := actions[i%len(actions)]
|
|
resourceType := resourceTypes[i%len(resourceTypes)]
|
|
username := usernames[i%len(usernames)]
|
|
|
|
// Erstelle Details mit verschiedenen Informationen
|
|
details := map[string]interface{}{
|
|
"message": fmt.Sprintf("Test-Log Eintrag #%d", i+1),
|
|
"iteration": i + 1,
|
|
"timestamp": time.Now().Format(time.RFC3339),
|
|
"testData": true,
|
|
"resourceId": fmt.Sprintf("test-resource-%d", i+1),
|
|
"description": fmt.Sprintf("Dies ist ein Test-Log-Eintrag für %s %s", action, resourceType),
|
|
}
|
|
|
|
// Füge spezifische Details basierend auf Resource-Type hinzu
|
|
switch resourceType {
|
|
case "user":
|
|
details["username"] = fmt.Sprintf("testuser%d", i+1)
|
|
details["email"] = fmt.Sprintf("test%d@example.com", i+1)
|
|
case "space":
|
|
details["name"] = fmt.Sprintf("Test Space %d", i+1)
|
|
details["description"] = "Test Space Description"
|
|
case "fqdn":
|
|
details["fqdn"] = fmt.Sprintf("test%d.example.com", i+1)
|
|
details["spaceId"] = fmt.Sprintf("space-%d", i%100)
|
|
case "csr":
|
|
details["fqdnId"] = fmt.Sprintf("fqdn-%d", i%200)
|
|
details["keySize"] = 2048
|
|
case "provider":
|
|
details["providerId"] = fmt.Sprintf("provider-%d", i%10)
|
|
details["enabled"] = i%2 == 0
|
|
case "certificate":
|
|
details["certificateId"] = fmt.Sprintf("cert-%d", i+1)
|
|
details["status"] = "issued"
|
|
}
|
|
|
|
// Erstelle Request Body
|
|
requestBody := map[string]interface{}{
|
|
"action": action,
|
|
"entity": resourceType,
|
|
"entityID": fmt.Sprintf("test-id-%d", i+1),
|
|
"userID": fmt.Sprintf("user-id-%d", i%5+1),
|
|
"username": username,
|
|
"details": details,
|
|
"ipAddress": fmt.Sprintf("192.168.1.%d", i%255+1),
|
|
"userAgent": "Test-Script/1.0",
|
|
}
|
|
|
|
jsonData, err := json.Marshal(requestBody)
|
|
if err != nil {
|
|
log.Printf("Fehler beim Marshalling: %v", err)
|
|
errorCount++
|
|
continue
|
|
}
|
|
|
|
// Erstelle HTTP Request
|
|
req, err := http.NewRequest("POST", fmt.Sprintf("%s/api/audit-logs/test", baseURL), bytes.NewBuffer(jsonData))
|
|
if err != nil {
|
|
log.Printf("Fehler beim Erstellen des Requests: %v", err)
|
|
errorCount++
|
|
continue
|
|
}
|
|
|
|
req.Header.Set("Content-Type", "application/json")
|
|
req.Header.Set("Authorization", fmt.Sprintf("Basic %s", auth))
|
|
|
|
// Sende Request
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.Printf("Fehler beim Senden des Requests: %v", err)
|
|
errorCount++
|
|
continue
|
|
}
|
|
resp.Body.Close()
|
|
|
|
if resp.StatusCode == http.StatusOK || resp.StatusCode == http.StatusCreated {
|
|
successCount++
|
|
if (i+1)%100 == 0 {
|
|
fmt.Printf("Progress: %d/3000 Logs erstellt\n", i+1)
|
|
}
|
|
} else {
|
|
errorCount++
|
|
log.Printf("Unerwarteter Status Code: %d für Log %d", resp.StatusCode, i+1)
|
|
}
|
|
|
|
// Kleine Pause, um die Datenbank nicht zu überlasten
|
|
if i%50 == 0 && i > 0 {
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
}
|
|
|
|
fmt.Printf("\nFertig!\n")
|
|
fmt.Printf("Erfolgreich: %d\n", successCount)
|
|
fmt.Printf("Fehler: %d\n", errorCount)
|
|
}
|
|
|