test fix import ndpi
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 1m40s
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 1m40s
This commit is contained in:
@@ -8,6 +8,7 @@ This module keeps nDPI integration optional:
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import importlib
|
||||||
import time
|
import time
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any, Dict, Optional, Tuple
|
from typing import Any, Dict, Optional, Tuple
|
||||||
@@ -16,10 +17,14 @@ from scapy.all import IP, IPv6, TCP, UDP # type: ignore
|
|||||||
|
|
||||||
logger = logging.getLogger("ndpi_classifier")
|
logger = logging.getLogger("ndpi_classifier")
|
||||||
|
|
||||||
try:
|
ndpi = None # type: ignore
|
||||||
import ndpi # type: ignore
|
_ndpi_import_error: Optional[str] = None
|
||||||
except Exception: # pragma: no cover - optional dependency
|
for _module_name in ("ndpi", "pyndpi"):
|
||||||
ndpi = None
|
try: # pragma: no cover - import depends on host runtime
|
||||||
|
ndpi = importlib.import_module(_module_name) # type: ignore
|
||||||
|
break
|
||||||
|
except Exception as exc:
|
||||||
|
_ndpi_import_error = f"{_module_name}: {exc!r}"
|
||||||
|
|
||||||
|
|
||||||
def _is_jsonable_scalar(value: Any) -> bool:
|
def _is_jsonable_scalar(value: Any) -> bool:
|
||||||
@@ -63,13 +68,21 @@ class NDPIClassifier:
|
|||||||
self._initialized = True
|
self._initialized = True
|
||||||
|
|
||||||
if ndpi is None:
|
if ndpi is None:
|
||||||
logger.warning("nDPI Python bindings not installed; DPI enrichment disabled")
|
logger.warning(
|
||||||
|
"nDPI Python bindings unavailable; DPI enrichment disabled (%s)",
|
||||||
|
_ndpi_import_error or "no ndpi module found",
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
engine_cls = getattr(ndpi, "NDPI", None)
|
engine_cls = getattr(ndpi, "NDPI", None)
|
||||||
if engine_cls is None:
|
if engine_cls is None:
|
||||||
logger.warning("nDPI bindings found but NDPI class missing; DPI enrichment disabled")
|
exported = [name for name in dir(ndpi) if name.lower().startswith("ndpi")]
|
||||||
|
logger.warning(
|
||||||
|
"nDPI bindings imported but NDPI class missing (module=%s, ndpi* exports=%s); DPI enrichment disabled",
|
||||||
|
getattr(ndpi, "__name__", "unknown"),
|
||||||
|
exported[:20],
|
||||||
|
)
|
||||||
return
|
return
|
||||||
self._engine = engine_cls()
|
self._engine = engine_cls()
|
||||||
logger.info("nDPI classifier initialized")
|
logger.info("nDPI classifier initialized")
|
||||||
|
|||||||
@@ -88,6 +88,25 @@ if [ -d "/tmp/nDPI/python" ]; then
|
|||||||
pip install "setuptools<81" "packaging<25" wheel
|
pip install "setuptools<81" "packaging<25" wheel
|
||||||
if ! pip install --no-build-isolation /tmp/nDPI/python; then
|
if ! pip install --no-build-isolation /tmp/nDPI/python; then
|
||||||
echo "==> WARNING: nDPI Python bindings install failed, backend will run without DPI enrichment"
|
echo "==> WARNING: nDPI Python bindings install failed, backend will run without DPI enrichment"
|
||||||
|
else
|
||||||
|
if python - <<'PY'
|
||||||
|
import importlib
|
||||||
|
mods = []
|
||||||
|
for name in ("ndpi", "pyndpi"):
|
||||||
|
try:
|
||||||
|
m = importlib.import_module(name)
|
||||||
|
mods.append((name, getattr(m, "__file__", "unknown")))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
if not mods:
|
||||||
|
raise SystemExit(1)
|
||||||
|
print("nDPI Python modules:", mods)
|
||||||
|
PY
|
||||||
|
then
|
||||||
|
echo "==> nDPI Python import check passed"
|
||||||
|
else
|
||||||
|
echo "==> WARNING: nDPI installed but import failed in backend venv"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -234,6 +253,18 @@ if [ -d "/tmp/nDPI/python" ]; then
|
|||||||
pip install "setuptools<81" "packaging<25" wheel
|
pip install "setuptools<81" "packaging<25" wheel
|
||||||
if ! pip install --no-build-isolation /tmp/nDPI/python; then
|
if ! pip install --no-build-isolation /tmp/nDPI/python; then
|
||||||
echo "WARNING: nDPI Python bindings install failed during runner build"
|
echo "WARNING: nDPI Python bindings install failed during runner build"
|
||||||
|
else
|
||||||
|
python - <<'PY' || echo "WARNING: nDPI import check failed during runner build"
|
||||||
|
import importlib
|
||||||
|
for name in ("ndpi", "pyndpi"):
|
||||||
|
try:
|
||||||
|
m = importlib.import_module(name)
|
||||||
|
print("nDPI import OK:", name, getattr(m, "__file__", "unknown"))
|
||||||
|
raise SystemExit(0)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
raise SystemExit(1)
|
||||||
|
PY
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
|||||||
Reference in New Issue
Block a user