Skip to content

Diagnostics

🙺 Diagnostic Checks

This document lists diagnostic checks for Azure Functions Doctor, based on Azure Functions Python Reference and Best Practices.

The tool supports both Programming Model v1 (function.json-based) and Programming Model v2 (decorator-based) projects, automatically detecting the model and applying appropriate checks.

Note: Checks now produce only three statuses: pass, warn (optional check failed), fail (required check failed).

v2 Programming Model Checks (Decorator-based)

# Diagnostic Check Description Status
1 Python version (supported) Verify runtime Python version is supported by Azure Functions (v2 recommends Python 3.9+ per MS docs) ✅ Implemented
2 Virtual environment (.venv) active Ensure Python environment is isolated (use virtualenv/venv for local development) ✅ Implemented
3 Python executable exists Validate Python executable path is present and usable ✅ Implemented
4 requirements.txt exists Check for dependency file; recommend pinning critical packages and checking for incompatible packages ✅ Implemented
5 azure-functions-python-library installed Ensure azure.functions package present for decorator-based programming model ✅ Implemented
6 host.json exists Ensure host.json is present; validate basic schema and common fields (e.g., logging, extensionBundle) ✅ Implemented
7 local.settings.json exists (optional) Optional local settings file for development (check presence and warn about missing common keys/SECRETS) ✅ Implemented
8 Azure Functions Core Tools (func) Recommend checking func is installed for local testing and tooling (version compatibility) Planned
9 Durable Functions config in host.json Check for durableTask section and that required extension/config is present Planned
10 HTTP trigger validation Validate HTTP trigger binding fields (authLevel, methods, route) and common misconfigurations Planned
11 Timer trigger CRON validation Validate schedule exists and CRON expression format is valid (consider second-field differences) Planned
12 App Insights configuration Check for Application Insights settings: env vars (APPLICATIONINSIGHTS_CONNECTION_STRING or instrumentation key) or host.json connection Planned
13 extensionBundle / binding extensions Validate extensionBundle in host.json or presence of required binding extensions for triggers Planned
15 ASGI/WSGI compatibility Detect whether app exposes ASGI/WSGI callable (for frameworks like FastAPI/Starlette) Planned
16 Detect unused or invalid files Warn about common unwanted files in project root or deployment (.pyc, __pycache__, .venv, tests`) Planned

v1 Programming Model Checks (function.json-based)

# Diagnostic Check Description Status
1 Python version (supported) Verify runtime Python version supported by v1 projects (legacy; document recommended versions, e.g., >=3.6) ✅ Implemented
2 Virtual environment (.venv) active Ensure Python environment is isolated (use virtualenv/venv for local development) ✅ Implemented
3 Python executable exists Validate Python executable path is present and usable ✅ Implemented
4 requirements.txt exists Check for dependency file; recommend pinning and validate azure-functions version compatibility ✅ Implemented
5 azure-functions-worker installed Ensure worker package for v1 function.json projects is present ✅ Implemented
6 host.json exists Ensure host.json is present; validate basic schema and common fields (e.g., extensionBundle) ✅ Implemented
7 local.settings.json exists (optional) Optional local settings file for development (check presence and warn about missing common keys/SECRETS) ✅ Implemented
8 Azure Functions Core Tools (func) Recommend checking func is installed for local testing and tooling (version compatibility) Planned
9 Durable Functions config in host.json Check for durableTask section and that required extension/config is present Planned
10 HTTP trigger validation Validate httpTrigger binding fields (authLevel, methods, route) and binding correctness Planned
11 Timer trigger CRON validation Validate schedule exists in binding and CRON expression format is valid Planned
12 App Insights configuration Check for Application Insights settings: env vars or host.json/telemetry configuration Planned
13 EntryPoint in function.json (v1 only) Verify entryPoint / scriptFile references a real module/function and is importable at runtime Planned
14 Function name and folder match (v1 only) Ensure function folder, function.json name and script location align Planned
15 extensionBundle / binding extensions Validate extensionBundle configuration or presence of required binding extensions (v1 binding support) Planned
16 Detect unused or invalid files Warn about common unwanted files in project root or deployment (.pyc, __pycache__, .venv, tests`) Planned

Not Feasible Checks

# Diagnostic Check Reason
17 Detect long-running blocking patterns Requires runtime analysis, not feasible by static analysis
18 Excessive logging Requires runtime analysis, not feasible by static analysis
19 Monolithic layout warning Requires context analysis, not feasible by static analysis

✅ Key Features

  • Programming Model Support: Supports both v1 and v2 projects with automatic detection
  • Model-Specific Rules: Different requirements and checks for each programming model
  • Unified Interface: Same CLI interface for both models with clear model indication
  • v1 Limited Support: v1 projects show "(limited support)" warning but still get basic diagnostics
  • Rule Separation: Separate rule sets for v1 and v2 with independent check_order management
  • Extensible Design: Easy to add new checks for either programming model