Loading…
Loading…
Alles was Sie brauchen, um die Gesundheit Ihrer Odoo-Instanz zu überwachen, vom ersten Scan bis zur kontinuierlichen Überwachung.
Erhalten Sie Ihren ersten Pulse Score in unter 60 Sekunden. Keine Installation erforderlich.
NonaGuard unterstützt zwei Verbindungsmethoden:
The score combines deprecated module count, permission vulnerabilities, custom code risks, and other heuristics. Each finding has a severity and contributes to the overall grade.
Der Pulse Score (0-100) ist ein gewichteter Gesundheits-Score basierend auf 8+ Kategorien:
For the best experience, use the NonaGuard Connector — it sends health pings every 15 minutes with no open ports or manual scans.
The NonaGuard Connector is a free native Odoo module that automatically pushes health data every 15 minutes — no manual scans, no open ports, works behind any firewall.
AI-generated recommendations, priority actions, and effort estimates are available out of the box on paid plans.
NonaGuard uses server-managed AI providers (with Groq prioritized) so your team can generate insights immediately without API key setup. Available on all paid plans.
Solo+ Invite team members and assign roles (Admin, Member, Viewer). Control who can add instances, run scans, or view sensitive data. Available on Solo, Agency, Partner, and Enterprise plans.
Partner / Enterprise Use the REST API to integrate NonaGuard with your CI/CD pipelines, ticketing systems, or internal dashboards.
opk_...) — it's shown only onceX-API-Key header in all requestsList instances:
curl -H "X-API-Key: opk_YOUR_KEY" \
https://api.nonaguard.com/api/v1/instances/Trigger a scan:
curl -X POST \
-H "X-API-Key: opk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"instance_id": "YOUR_INSTANCE_ID"}' \
https://api.nonaguard.com/api/v1/scans/triggerGet scan results:
curl -H "X-API-Key: opk_YOUR_KEY" \
https://api.nonaguard.com/api/v1/scans/SCAN_IDDownload PDF report:
curl -H "X-API-Key: opk_YOUR_KEY" \
-o report.pdf \
https://api.nonaguard.com/api/v1/reports/SCAN_ID/pdfconst API_KEY = "opk_YOUR_KEY";
const BASE = "https://api.nonaguard.com/api/v1";
const headers = { "X-API-Key": API_KEY, "Content-Type": "application/json" };
// Trigger a scan
const { scan_id } = await fetch(`${BASE}/scans/trigger`, {
method: "POST",
headers,
body: JSON.stringify({ instance_id: "YOUR_INSTANCE_ID" }),
}).then(r => r.json());
// Poll until complete (simple example)
let scan;
do {
await new Promise(r => setTimeout(r, 5000));
scan = await fetch(`${BASE}/scans/${scan_id}`, { headers }).then(r => r.json());
} while (scan.status === "queued" || scan.status === "running");
console.log(`Score: ${scan.pulse_score}/100 (Grade: ${scan.grade})`);
console.log(`Risks: ${scan.risks_count} total`);import requests, time
API_KEY = "opk_YOUR_KEY"
BASE = "https://api.nonaguard.com/api/v1"
headers = {"X-API-Key": API_KEY}
# Trigger a scan
resp = requests.post(f"{BASE}/scans/trigger",
headers=headers,
json={"instance_id": "YOUR_INSTANCE_ID"})
scan_id = resp.json()["scan_id"]
# Poll until complete
while True:
scan = requests.get(f"{BASE}/scans/{scan_id}", headers=headers).json()
if scan["status"] in ("completed", "failed"):
break
time.sleep(5)
print(f"Score: {scan['pulse_score']}/100 (Grade: {scan['grade']})")
print(f"Risks: {scan['risks_count']} total")
# Download PDF report
pdf = requests.get(f"{BASE}/reports/{scan_id}/pdf", headers=headers)
with open("report.pdf", "wb") as f:
f.write(pdf.content)scan scope required)