diff --git a/demos/samples_python/currency_exchange/README.md b/demos/advanced/currency_exchange/README.md
similarity index 100%
rename from demos/samples_python/currency_exchange/README.md
rename to demos/advanced/currency_exchange/README.md
diff --git a/demos/samples_python/currency_exchange/config.yaml b/demos/advanced/currency_exchange/config.yaml
similarity index 100%
rename from demos/samples_python/currency_exchange/config.yaml
rename to demos/advanced/currency_exchange/config.yaml
diff --git a/demos/samples_python/currency_exchange/docker-compose.yaml b/demos/advanced/currency_exchange/docker-compose.yaml
similarity index 100%
rename from demos/samples_python/currency_exchange/docker-compose.yaml
rename to demos/advanced/currency_exchange/docker-compose.yaml
diff --git a/demos/samples_python/currency_exchange/hurl_tests/simple.hurl b/demos/advanced/currency_exchange/hurl_tests/simple.hurl
similarity index 100%
rename from demos/samples_python/currency_exchange/hurl_tests/simple.hurl
rename to demos/advanced/currency_exchange/hurl_tests/simple.hurl
diff --git a/demos/samples_python/currency_exchange/hurl_tests/simple_stream.hurl b/demos/advanced/currency_exchange/hurl_tests/simple_stream.hurl
similarity index 100%
rename from demos/samples_python/currency_exchange/hurl_tests/simple_stream.hurl
rename to demos/advanced/currency_exchange/hurl_tests/simple_stream.hurl
diff --git a/demos/samples_java/weather_forcecast_service/run_demo.sh b/demos/advanced/currency_exchange/run_demo.sh
similarity index 100%
rename from demos/samples_java/weather_forcecast_service/run_demo.sh
rename to demos/advanced/currency_exchange/run_demo.sh
diff --git a/demos/samples_python/currency_exchange/test_data.yaml b/demos/advanced/currency_exchange/test_data.yaml
similarity index 100%
rename from demos/samples_python/currency_exchange/test_data.yaml
rename to demos/advanced/currency_exchange/test_data.yaml
diff --git a/demos/use_cases/model_choice_with_test_harness/README.md b/demos/advanced/model_choice_test_harness/README.md
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/README.md
rename to demos/advanced/model_choice_test_harness/README.md
diff --git a/demos/use_cases/model_choice_with_test_harness/bench.py b/demos/advanced/model_choice_test_harness/bench.py
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/bench.py
rename to demos/advanced/model_choice_test_harness/bench.py
diff --git a/demos/use_cases/model_choice_with_test_harness/evals_summarize.yaml b/demos/advanced/model_choice_test_harness/evals_summarize.yaml
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/evals_summarize.yaml
rename to demos/advanced/model_choice_test_harness/evals_summarize.yaml
diff --git a/demos/use_cases/model_choice_with_test_harness/plano_config_with_aliases.yaml b/demos/advanced/model_choice_test_harness/plano_config_with_aliases.yaml
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/plano_config_with_aliases.yaml
rename to demos/advanced/model_choice_test_harness/plano_config_with_aliases.yaml
diff --git a/demos/use_cases/model_choice_with_test_harness/pyproject.toml b/demos/advanced/model_choice_test_harness/pyproject.toml
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/pyproject.toml
rename to demos/advanced/model_choice_test_harness/pyproject.toml
diff --git a/demos/use_cases/model_choice_with_test_harness/run_demo.sh b/demos/advanced/model_choice_test_harness/run_demo.sh
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/run_demo.sh
rename to demos/advanced/model_choice_test_harness/run_demo.sh
diff --git a/demos/use_cases/model_choice_with_test_harness/uv.lock b/demos/advanced/model_choice_test_harness/uv.lock
similarity index 100%
rename from demos/use_cases/model_choice_with_test_harness/uv.lock
rename to demos/advanced/model_choice_test_harness/uv.lock
diff --git a/demos/samples_python/multi_turn_rag_agent/Dockerfile b/demos/advanced/multi_turn_rag/Dockerfile
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/Dockerfile
rename to demos/advanced/multi_turn_rag/Dockerfile
diff --git a/demos/samples_python/multi_turn_rag_agent/README.md b/demos/advanced/multi_turn_rag/README.md
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/README.md
rename to demos/advanced/multi_turn_rag/README.md
diff --git a/demos/samples_python/multi_turn_rag_agent/config.yaml b/demos/advanced/multi_turn_rag/config.yaml
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/config.yaml
rename to demos/advanced/multi_turn_rag/config.yaml
diff --git a/demos/samples_python/multi_turn_rag_agent/docker-compose.yaml b/demos/advanced/multi_turn_rag/docker-compose.yaml
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/docker-compose.yaml
rename to demos/advanced/multi_turn_rag/docker-compose.yaml
diff --git a/demos/samples_python/multi_turn_rag_agent/main.py b/demos/advanced/multi_turn_rag/main.py
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/main.py
rename to demos/advanced/multi_turn_rag/main.py
diff --git a/demos/samples_python/multi_turn_rag_agent/mutli-turn-example.png b/demos/advanced/multi_turn_rag/mutli-turn-example.png
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/mutli-turn-example.png
rename to demos/advanced/multi_turn_rag/mutli-turn-example.png
diff --git a/demos/samples_python/multi_turn_rag_agent/requirements.txt b/demos/advanced/multi_turn_rag/requirements.txt
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/requirements.txt
rename to demos/advanced/multi_turn_rag/requirements.txt
diff --git a/demos/samples_python/multi_turn_rag_agent/run_demo.sh b/demos/advanced/multi_turn_rag/run_demo.sh
similarity index 100%
rename from demos/samples_python/multi_turn_rag_agent/run_demo.sh
rename to demos/advanced/multi_turn_rag/run_demo.sh
diff --git a/demos/samples_python/stock_quote/README.md b/demos/advanced/stock_quote/README.md
similarity index 100%
rename from demos/samples_python/stock_quote/README.md
rename to demos/advanced/stock_quote/README.md
diff --git a/demos/samples_python/stock_quote/config.yaml b/demos/advanced/stock_quote/config.yaml
similarity index 100%
rename from demos/samples_python/stock_quote/config.yaml
rename to demos/advanced/stock_quote/config.yaml
diff --git a/demos/samples_python/stock_quote/docker-compose.yaml b/demos/advanced/stock_quote/docker-compose.yaml
similarity index 100%
rename from demos/samples_python/stock_quote/docker-compose.yaml
rename to demos/advanced/stock_quote/docker-compose.yaml
diff --git a/demos/samples_python/currency_exchange/run_demo.sh b/demos/advanced/stock_quote/run_demo.sh
similarity index 100%
rename from demos/samples_python/currency_exchange/run_demo.sh
rename to demos/advanced/stock_quote/run_demo.sh
diff --git a/demos/samples_python/stock_quote/stock_quote_demo.png b/demos/advanced/stock_quote/stock_quote_demo.png
similarity index 100%
rename from demos/samples_python/stock_quote/stock_quote_demo.png
rename to demos/advanced/stock_quote/stock_quote_demo.png
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/Dockerfile b/demos/agent_orchestration/multi_agent_crewai_langchain/Dockerfile
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/Dockerfile
rename to demos/agent_orchestration/multi_agent_crewai_langchain/Dockerfile
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/README.md b/demos/agent_orchestration/multi_agent_crewai_langchain/README.md
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/README.md
rename to demos/agent_orchestration/multi_agent_crewai_langchain/README.md
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/config.yaml b/demos/agent_orchestration/multi_agent_crewai_langchain/config.yaml
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/config.yaml
rename to demos/agent_orchestration/multi_agent_crewai_langchain/config.yaml
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/crewai/flight_agent.py b/demos/agent_orchestration/multi_agent_crewai_langchain/crewai/flight_agent.py
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/crewai/flight_agent.py
rename to demos/agent_orchestration/multi_agent_crewai_langchain/crewai/flight_agent.py
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/docker-compose.yaml b/demos/agent_orchestration/multi_agent_crewai_langchain/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/docker-compose.yaml
rename to demos/agent_orchestration/multi_agent_crewai_langchain/docker-compose.yaml
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/langchain/weather_agent.py b/demos/agent_orchestration/multi_agent_crewai_langchain/langchain/weather_agent.py
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/langchain/weather_agent.py
rename to demos/agent_orchestration/multi_agent_crewai_langchain/langchain/weather_agent.py
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/openai_protocol.py b/demos/agent_orchestration/multi_agent_crewai_langchain/openai_protocol.py
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/openai_protocol.py
rename to demos/agent_orchestration/multi_agent_crewai_langchain/openai_protocol.py
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/pyproject.toml b/demos/agent_orchestration/multi_agent_crewai_langchain/pyproject.toml
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/pyproject.toml
rename to demos/agent_orchestration/multi_agent_crewai_langchain/pyproject.toml
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/traces.png b/demos/agent_orchestration/multi_agent_crewai_langchain/traces.png
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/traces.png
rename to demos/agent_orchestration/multi_agent_crewai_langchain/traces.png
diff --git a/demos/use_cases/multi_agent_with_crewai_langchain/uv.lock b/demos/agent_orchestration/multi_agent_crewai_langchain/uv.lock
similarity index 100%
rename from demos/use_cases/multi_agent_with_crewai_langchain/uv.lock
rename to demos/agent_orchestration/multi_agent_crewai_langchain/uv.lock
diff --git a/demos/use_cases/travel_agents/Dockerfile b/demos/agent_orchestration/travel_agents/Dockerfile
similarity index 100%
rename from demos/use_cases/travel_agents/Dockerfile
rename to demos/agent_orchestration/travel_agents/Dockerfile
diff --git a/demos/use_cases/travel_agents/README.md b/demos/agent_orchestration/travel_agents/README.md
similarity index 100%
rename from demos/use_cases/travel_agents/README.md
rename to demos/agent_orchestration/travel_agents/README.md
diff --git a/demos/use_cases/travel_agents/config.yaml b/demos/agent_orchestration/travel_agents/config.yaml
similarity index 100%
rename from demos/use_cases/travel_agents/config.yaml
rename to demos/agent_orchestration/travel_agents/config.yaml
diff --git a/demos/use_cases/travel_agents/docker-compose.yaml b/demos/agent_orchestration/travel_agents/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/travel_agents/docker-compose.yaml
rename to demos/agent_orchestration/travel_agents/docker-compose.yaml
diff --git a/demos/use_cases/travel_agents/pyproject.toml b/demos/agent_orchestration/travel_agents/pyproject.toml
similarity index 100%
rename from demos/use_cases/travel_agents/pyproject.toml
rename to demos/agent_orchestration/travel_agents/pyproject.toml
diff --git a/demos/use_cases/travel_agents/src/travel_agents/flight_agent.py b/demos/agent_orchestration/travel_agents/src/travel_agents/flight_agent.py
similarity index 100%
rename from demos/use_cases/travel_agents/src/travel_agents/flight_agent.py
rename to demos/agent_orchestration/travel_agents/src/travel_agents/flight_agent.py
diff --git a/demos/use_cases/travel_agents/src/travel_agents/weather_agent.py b/demos/agent_orchestration/travel_agents/src/travel_agents/weather_agent.py
similarity index 100%
rename from demos/use_cases/travel_agents/src/travel_agents/weather_agent.py
rename to demos/agent_orchestration/travel_agents/src/travel_agents/weather_agent.py
diff --git a/demos/use_cases/travel_agents/test.rest b/demos/agent_orchestration/travel_agents/test.rest
similarity index 100%
rename from demos/use_cases/travel_agents/test.rest
rename to demos/agent_orchestration/travel_agents/test.rest
diff --git a/demos/use_cases/travel_agents/tracing.png b/demos/agent_orchestration/travel_agents/tracing.png
similarity index 100%
rename from demos/use_cases/travel_agents/tracing.png
rename to demos/agent_orchestration/travel_agents/tracing.png
diff --git a/demos/use_cases/travel_agents/travel_agent_request.rest b/demos/agent_orchestration/travel_agents/travel_agent_request.rest
similarity index 100%
rename from demos/use_cases/travel_agents/travel_agent_request.rest
rename to demos/agent_orchestration/travel_agents/travel_agent_request.rest
diff --git a/demos/use_cases/travel_agents/uv.lock b/demos/agent_orchestration/travel_agents/uv.lock
similarity index 100%
rename from demos/use_cases/travel_agents/uv.lock
rename to demos/agent_orchestration/travel_agents/uv.lock
diff --git a/demos/use_cases/http_filter/Dockerfile b/demos/filter_chains/http_filter/Dockerfile
similarity index 100%
rename from demos/use_cases/http_filter/Dockerfile
rename to demos/filter_chains/http_filter/Dockerfile
diff --git a/demos/use_cases/http_filter/README.md b/demos/filter_chains/http_filter/README.md
similarity index 100%
rename from demos/use_cases/http_filter/README.md
rename to demos/filter_chains/http_filter/README.md
diff --git a/demos/use_cases/http_filter/config.yaml b/demos/filter_chains/http_filter/config.yaml
similarity index 100%
rename from demos/use_cases/http_filter/config.yaml
rename to demos/filter_chains/http_filter/config.yaml
diff --git a/demos/use_cases/http_filter/docker-compose.yaml b/demos/filter_chains/http_filter/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/http_filter/docker-compose.yaml
rename to demos/filter_chains/http_filter/docker-compose.yaml
diff --git a/demos/use_cases/http_filter/http.rest b/demos/filter_chains/http_filter/http.rest
similarity index 100%
rename from demos/use_cases/http_filter/http.rest
rename to demos/filter_chains/http_filter/http.rest
diff --git a/demos/use_cases/http_filter/mcp_query.rest b/demos/filter_chains/http_filter/mcp_query.rest
similarity index 100%
rename from demos/use_cases/http_filter/mcp_query.rest
rename to demos/filter_chains/http_filter/mcp_query.rest
diff --git a/demos/use_cases/http_filter/pyproject.toml b/demos/filter_chains/http_filter/pyproject.toml
similarity index 100%
rename from demos/use_cases/http_filter/pyproject.toml
rename to demos/filter_chains/http_filter/pyproject.toml
diff --git a/demos/use_cases/http_filter/sample_queries.md b/demos/filter_chains/http_filter/sample_queries.md
similarity index 100%
rename from demos/use_cases/http_filter/sample_queries.md
rename to demos/filter_chains/http_filter/sample_queries.md
diff --git a/demos/use_cases/http_filter/src/rag_agent/__init__.py b/demos/filter_chains/http_filter/src/rag_agent/__init__.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/__init__.py
rename to demos/filter_chains/http_filter/src/rag_agent/__init__.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/__main__.py b/demos/filter_chains/http_filter/src/rag_agent/__main__.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/__main__.py
rename to demos/filter_chains/http_filter/src/rag_agent/__main__.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/api.py b/demos/filter_chains/http_filter/src/rag_agent/api.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/api.py
rename to demos/filter_chains/http_filter/src/rag_agent/api.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/context_builder.py b/demos/filter_chains/http_filter/src/rag_agent/context_builder.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/context_builder.py
rename to demos/filter_chains/http_filter/src/rag_agent/context_builder.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/input_guards.py b/demos/filter_chains/http_filter/src/rag_agent/input_guards.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/input_guards.py
rename to demos/filter_chains/http_filter/src/rag_agent/input_guards.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/query_rewriter.py b/demos/filter_chains/http_filter/src/rag_agent/query_rewriter.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/query_rewriter.py
rename to demos/filter_chains/http_filter/src/rag_agent/query_rewriter.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/rag_agent.py b/demos/filter_chains/http_filter/src/rag_agent/rag_agent.py
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/rag_agent.py
rename to demos/filter_chains/http_filter/src/rag_agent/rag_agent.py
diff --git a/demos/use_cases/http_filter/src/rag_agent/sample_knowledge_base.csv b/demos/filter_chains/http_filter/src/rag_agent/sample_knowledge_base.csv
similarity index 100%
rename from demos/use_cases/http_filter/src/rag_agent/sample_knowledge_base.csv
rename to demos/filter_chains/http_filter/src/rag_agent/sample_knowledge_base.csv
diff --git a/demos/use_cases/http_filter/start_agents.sh b/demos/filter_chains/http_filter/start_agents.sh
similarity index 100%
rename from demos/use_cases/http_filter/start_agents.sh
rename to demos/filter_chains/http_filter/start_agents.sh
diff --git a/demos/use_cases/http_filter/test.rest b/demos/filter_chains/http_filter/test.rest
similarity index 100%
rename from demos/use_cases/http_filter/test.rest
rename to demos/filter_chains/http_filter/test.rest
diff --git a/demos/use_cases/http_filter/uv.lock b/demos/filter_chains/http_filter/uv.lock
similarity index 100%
rename from demos/use_cases/http_filter/uv.lock
rename to demos/filter_chains/http_filter/uv.lock
diff --git a/demos/use_cases/mcp_filter/Dockerfile b/demos/filter_chains/mcp_filter/Dockerfile
similarity index 100%
rename from demos/use_cases/mcp_filter/Dockerfile
rename to demos/filter_chains/mcp_filter/Dockerfile
diff --git a/demos/use_cases/mcp_filter/README.md b/demos/filter_chains/mcp_filter/README.md
similarity index 100%
rename from demos/use_cases/mcp_filter/README.md
rename to demos/filter_chains/mcp_filter/README.md
diff --git a/demos/use_cases/mcp_filter/config.yaml b/demos/filter_chains/mcp_filter/config.yaml
similarity index 100%
rename from demos/use_cases/mcp_filter/config.yaml
rename to demos/filter_chains/mcp_filter/config.yaml
diff --git a/demos/use_cases/mcp_filter/docker-compose.yaml b/demos/filter_chains/mcp_filter/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/mcp_filter/docker-compose.yaml
rename to demos/filter_chains/mcp_filter/docker-compose.yaml
diff --git a/demos/use_cases/mcp_filter/mcp_query.rest b/demos/filter_chains/mcp_filter/mcp_query.rest
similarity index 100%
rename from demos/use_cases/mcp_filter/mcp_query.rest
rename to demos/filter_chains/mcp_filter/mcp_query.rest
diff --git a/demos/use_cases/mcp_filter/pyproject.toml b/demos/filter_chains/mcp_filter/pyproject.toml
similarity index 100%
rename from demos/use_cases/mcp_filter/pyproject.toml
rename to demos/filter_chains/mcp_filter/pyproject.toml
diff --git a/demos/use_cases/mcp_filter/sample_queries.md b/demos/filter_chains/mcp_filter/sample_queries.md
similarity index 100%
rename from demos/use_cases/mcp_filter/sample_queries.md
rename to demos/filter_chains/mcp_filter/sample_queries.md
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/__init__.py b/demos/filter_chains/mcp_filter/src/rag_agent/__init__.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/__init__.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/__init__.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/__main__.py b/demos/filter_chains/mcp_filter/src/rag_agent/__main__.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/__main__.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/__main__.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/api.py b/demos/filter_chains/mcp_filter/src/rag_agent/api.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/api.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/api.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/context_builder.py b/demos/filter_chains/mcp_filter/src/rag_agent/context_builder.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/context_builder.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/context_builder.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/input_guards.py b/demos/filter_chains/mcp_filter/src/rag_agent/input_guards.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/input_guards.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/input_guards.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/query_rewriter.py b/demos/filter_chains/mcp_filter/src/rag_agent/query_rewriter.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/query_rewriter.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/query_rewriter.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/rag_agent.py b/demos/filter_chains/mcp_filter/src/rag_agent/rag_agent.py
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/rag_agent.py
rename to demos/filter_chains/mcp_filter/src/rag_agent/rag_agent.py
diff --git a/demos/use_cases/mcp_filter/src/rag_agent/sample_knowledge_base.csv b/demos/filter_chains/mcp_filter/src/rag_agent/sample_knowledge_base.csv
similarity index 100%
rename from demos/use_cases/mcp_filter/src/rag_agent/sample_knowledge_base.csv
rename to demos/filter_chains/mcp_filter/src/rag_agent/sample_knowledge_base.csv
diff --git a/demos/use_cases/mcp_filter/start_agents.sh b/demos/filter_chains/mcp_filter/start_agents.sh
similarity index 100%
rename from demos/use_cases/mcp_filter/start_agents.sh
rename to demos/filter_chains/mcp_filter/start_agents.sh
diff --git a/demos/use_cases/mcp_filter/test.rest b/demos/filter_chains/mcp_filter/test.rest
similarity index 100%
rename from demos/use_cases/mcp_filter/test.rest
rename to demos/filter_chains/mcp_filter/test.rest
diff --git a/demos/use_cases/mcp_filter/uv.lock b/demos/filter_chains/mcp_filter/uv.lock
similarity index 100%
rename from demos/use_cases/mcp_filter/uv.lock
rename to demos/filter_chains/mcp_filter/uv.lock
diff --git a/demos/use_cases/llm_routing/README.md b/demos/getting_started/llm_gateway/README.md
similarity index 100%
rename from demos/use_cases/llm_routing/README.md
rename to demos/getting_started/llm_gateway/README.md
diff --git a/demos/use_cases/llm_routing/config.yaml b/demos/getting_started/llm_gateway/config.yaml
similarity index 100%
rename from demos/use_cases/llm_routing/config.yaml
rename to demos/getting_started/llm_gateway/config.yaml
diff --git a/demos/use_cases/llm_routing/docker-compose.yaml b/demos/getting_started/llm_gateway/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/llm_routing/docker-compose.yaml
rename to demos/getting_started/llm_gateway/docker-compose.yaml
diff --git a/demos/use_cases/llm_routing/jaeger_tracing_llm_routing.png b/demos/getting_started/llm_gateway/jaeger_tracing_llm_routing.png
similarity index 100%
rename from demos/use_cases/llm_routing/jaeger_tracing_llm_routing.png
rename to demos/getting_started/llm_gateway/jaeger_tracing_llm_routing.png
diff --git a/demos/use_cases/llm_routing/llm_routing_demo.png b/demos/getting_started/llm_gateway/llm_routing_demo.png
similarity index 100%
rename from demos/use_cases/llm_routing/llm_routing_demo.png
rename to demos/getting_started/llm_gateway/llm_routing_demo.png
diff --git a/demos/use_cases/llm_routing/run_demo.sh b/demos/getting_started/llm_gateway/run_demo.sh
similarity index 100%
rename from demos/use_cases/llm_routing/run_demo.sh
rename to demos/getting_started/llm_gateway/run_demo.sh
diff --git a/demos/samples_python/weather_forecast/Dockerfile b/demos/getting_started/weather_forecast/Dockerfile
similarity index 100%
rename from demos/samples_python/weather_forecast/Dockerfile
rename to demos/getting_started/weather_forecast/Dockerfile
diff --git a/demos/samples_python/weather_forecast/README.md b/demos/getting_started/weather_forecast/README.md
similarity index 100%
rename from demos/samples_python/weather_forecast/README.md
rename to demos/getting_started/weather_forecast/README.md
diff --git a/demos/samples_python/weather_forecast/config.yaml b/demos/getting_started/weather_forecast/config.yaml
similarity index 100%
rename from demos/samples_python/weather_forecast/config.yaml
rename to demos/getting_started/weather_forecast/config.yaml
diff --git a/demos/samples_python/weather_forecast/docker-compose.yaml b/demos/getting_started/weather_forecast/docker-compose.yaml
similarity index 100%
rename from demos/samples_python/weather_forecast/docker-compose.yaml
rename to demos/getting_started/weather_forecast/docker-compose.yaml
diff --git a/demos/samples_python/weather_forecast/hurl_tests/simple.hurl b/demos/getting_started/weather_forecast/hurl_tests/simple.hurl
similarity index 100%
rename from demos/samples_python/weather_forecast/hurl_tests/simple.hurl
rename to demos/getting_started/weather_forecast/hurl_tests/simple.hurl
diff --git a/demos/samples_python/weather_forecast/hurl_tests/simple_stream.hurl b/demos/getting_started/weather_forecast/hurl_tests/simple_stream.hurl
similarity index 100%
rename from demos/samples_python/weather_forecast/hurl_tests/simple_stream.hurl
rename to demos/getting_started/weather_forecast/hurl_tests/simple_stream.hurl
diff --git a/demos/samples_python/weather_forecast/main.py b/demos/getting_started/weather_forecast/main.py
similarity index 100%
rename from demos/samples_python/weather_forecast/main.py
rename to demos/getting_started/weather_forecast/main.py
diff --git a/demos/samples_python/weather_forecast/pyproject.toml b/demos/getting_started/weather_forecast/pyproject.toml
similarity index 100%
rename from demos/samples_python/weather_forecast/pyproject.toml
rename to demos/getting_started/weather_forecast/pyproject.toml
diff --git a/demos/samples_python/weather_forecast/run_demo.sh b/demos/getting_started/weather_forecast/run_demo.sh
similarity index 100%
rename from demos/samples_python/weather_forecast/run_demo.sh
rename to demos/getting_started/weather_forecast/run_demo.sh
diff --git a/demos/samples_python/weather_forecast/uv.lock b/demos/getting_started/weather_forecast/uv.lock
similarity index 100%
rename from demos/samples_python/weather_forecast/uv.lock
rename to demos/getting_started/weather_forecast/uv.lock
diff --git a/demos/use_cases/ollama/README.md b/demos/integrations/ollama/README.md
similarity index 100%
rename from demos/use_cases/ollama/README.md
rename to demos/integrations/ollama/README.md
diff --git a/demos/use_cases/ollama/config.yaml b/demos/integrations/ollama/config.yaml
similarity index 100%
rename from demos/use_cases/ollama/config.yaml
rename to demos/integrations/ollama/config.yaml
diff --git a/demos/use_cases/ollama/docker-compose.yaml b/demos/integrations/ollama/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/ollama/docker-compose.yaml
rename to demos/integrations/ollama/docker-compose.yaml
diff --git a/demos/samples_python/stock_quote/run_demo.sh b/demos/integrations/ollama/run_demo.sh
similarity index 100%
rename from demos/samples_python/stock_quote/run_demo.sh
rename to demos/integrations/ollama/run_demo.sh
diff --git a/demos/use_cases/spotify_bearer_auth/README.md b/demos/integrations/spotify_bearer_auth/README.md
similarity index 100%
rename from demos/use_cases/spotify_bearer_auth/README.md
rename to demos/integrations/spotify_bearer_auth/README.md
diff --git a/demos/use_cases/spotify_bearer_auth/config.yaml b/demos/integrations/spotify_bearer_auth/config.yaml
similarity index 100%
rename from demos/use_cases/spotify_bearer_auth/config.yaml
rename to demos/integrations/spotify_bearer_auth/config.yaml
diff --git a/demos/use_cases/spotify_bearer_auth/docker-compose.yaml b/demos/integrations/spotify_bearer_auth/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/spotify_bearer_auth/docker-compose.yaml
rename to demos/integrations/spotify_bearer_auth/docker-compose.yaml
diff --git a/demos/use_cases/ollama/run_demo.sh b/demos/integrations/spotify_bearer_auth/run_demo.sh
similarity index 100%
rename from demos/use_cases/ollama/run_demo.sh
rename to demos/integrations/spotify_bearer_auth/run_demo.sh
diff --git a/demos/use_cases/spotify_bearer_auth/spotify_bearer_auth.png b/demos/integrations/spotify_bearer_auth/spotify_bearer_auth.png
similarity index 100%
rename from demos/use_cases/spotify_bearer_auth/spotify_bearer_auth.png
rename to demos/integrations/spotify_bearer_auth/spotify_bearer_auth.png
diff --git a/demos/use_cases/claude_code_router/README.md b/demos/llm_routing/claude_code_router/README.md
similarity index 100%
rename from demos/use_cases/claude_code_router/README.md
rename to demos/llm_routing/claude_code_router/README.md
diff --git a/demos/use_cases/claude_code_router/claude_code.png b/demos/llm_routing/claude_code_router/claude_code.png
similarity index 100%
rename from demos/use_cases/claude_code_router/claude_code.png
rename to demos/llm_routing/claude_code_router/claude_code.png
diff --git a/demos/use_cases/claude_code_router/config.yaml b/demos/llm_routing/claude_code_router/config.yaml
similarity index 100%
rename from demos/use_cases/claude_code_router/config.yaml
rename to demos/llm_routing/claude_code_router/config.yaml
diff --git a/demos/use_cases/claude_code_router/model_selection.png b/demos/llm_routing/claude_code_router/model_selection.png
similarity index 100%
rename from demos/use_cases/claude_code_router/model_selection.png
rename to demos/llm_routing/claude_code_router/model_selection.png
diff --git a/demos/use_cases/claude_code_router/pretty_model_resolution.sh b/demos/llm_routing/claude_code_router/pretty_model_resolution.sh
similarity index 100%
rename from demos/use_cases/claude_code_router/pretty_model_resolution.sh
rename to demos/llm_routing/claude_code_router/pretty_model_resolution.sh
diff --git a/demos/use_cases/model_alias_routing/README.md b/demos/llm_routing/model_alias_routing/README.md
similarity index 100%
rename from demos/use_cases/model_alias_routing/README.md
rename to demos/llm_routing/model_alias_routing/README.md
diff --git a/demos/use_cases/model_alias_routing/config_with_aliases.yaml b/demos/llm_routing/model_alias_routing/config_with_aliases.yaml
similarity index 100%
rename from demos/use_cases/model_alias_routing/config_with_aliases.yaml
rename to demos/llm_routing/model_alias_routing/config_with_aliases.yaml
diff --git a/demos/use_cases/model_alias_routing/run_demo.sh b/demos/llm_routing/model_alias_routing/run_demo.sh
similarity index 100%
rename from demos/use_cases/model_alias_routing/run_demo.sh
rename to demos/llm_routing/model_alias_routing/run_demo.sh
diff --git a/demos/use_cases/preference_based_routing/README.md b/demos/llm_routing/preference_based_routing/README.md
similarity index 100%
rename from demos/use_cases/preference_based_routing/README.md
rename to demos/llm_routing/preference_based_routing/README.md
diff --git a/demos/use_cases/preference_based_routing/config.yaml b/demos/llm_routing/preference_based_routing/config.yaml
similarity index 100%
rename from demos/use_cases/preference_based_routing/config.yaml
rename to demos/llm_routing/preference_based_routing/config.yaml
diff --git a/demos/use_cases/preference_based_routing/docker-compose.yaml b/demos/llm_routing/preference_based_routing/docker-compose.yaml
similarity index 100%
rename from demos/use_cases/preference_based_routing/docker-compose.yaml
rename to demos/llm_routing/preference_based_routing/docker-compose.yaml
diff --git a/demos/use_cases/preference_based_routing/hurl_tests/simple.hurl b/demos/llm_routing/preference_based_routing/hurl_tests/simple.hurl
similarity index 100%
rename from demos/use_cases/preference_based_routing/hurl_tests/simple.hurl
rename to demos/llm_routing/preference_based_routing/hurl_tests/simple.hurl
diff --git a/demos/use_cases/preference_based_routing/hurl_tests/simple_stream.hurl b/demos/llm_routing/preference_based_routing/hurl_tests/simple_stream.hurl
similarity index 100%
rename from demos/use_cases/preference_based_routing/hurl_tests/simple_stream.hurl
rename to demos/llm_routing/preference_based_routing/hurl_tests/simple_stream.hurl
diff --git a/demos/use_cases/preference_based_routing/plano_config_local.yaml b/demos/llm_routing/preference_based_routing/plano_config_local.yaml
similarity index 100%
rename from demos/use_cases/preference_based_routing/plano_config_local.yaml
rename to demos/llm_routing/preference_based_routing/plano_config_local.yaml
diff --git a/demos/use_cases/preference_based_routing/test_router_endpoint.rest b/demos/llm_routing/preference_based_routing/test_router_endpoint.rest
similarity index 100%
rename from demos/use_cases/preference_based_routing/test_router_endpoint.rest
rename to demos/llm_routing/preference_based_routing/test_router_endpoint.rest
diff --git a/demos/samples_java/weather_forcecast_service/.classpath b/demos/samples_java/weather_forcecast_service/.classpath
deleted file mode 100644
index e16ec965..00000000
--- a/demos/samples_java/weather_forcecast_service/.classpath
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demos/samples_java/weather_forcecast_service/.project b/demos/samples_java/weather_forcecast_service/.project
deleted file mode 100644
index efcdddf7..00000000
--- a/demos/samples_java/weather_forcecast_service/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
- weather-forecast-service
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.m2e.core.maven2Builder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.m2e.core.maven2Nature
-
-
-
- 1742579142020
-
- 30
-
- org.eclipse.core.resources.regexFilterMatcher
- node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
-
-
-
-
diff --git a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.core.resources.prefs b/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index abdea9ac..00000000
--- a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main/java=UTF-8
-encoding//src/main/resources=UTF-8
-encoding/=UTF-8
diff --git a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.jdt.apt.core.prefs b/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.jdt.apt.core.prefs
deleted file mode 100644
index d4313d4b..00000000
--- a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.jdt.apt.core.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.apt.aptEnabled=false
diff --git a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.jdt.core.prefs b/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 951833c6..00000000
--- a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,10 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
-org.eclipse.jdt.core.compiler.processAnnotations=disabled
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.m2e.core.prefs b/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f1..00000000
--- a/demos/samples_java/weather_forcecast_service/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/demos/samples_java/weather_forcecast_service/.vscode/launch.json b/demos/samples_java/weather_forcecast_service/.vscode/launch.json
deleted file mode 100644
index a9232a53..00000000
--- a/demos/samples_java/weather_forcecast_service/.vscode/launch.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- // Use IntelliSense to learn about possible attributes.
- // Hover to view descriptions of existing attributes.
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
- "version": "0.2.0",
- "configurations": [
- {
- "type": "java",
- "name": "WeatherForecastApplication",
- "request": "launch",
- "mainClass": "weather.WeatherForecastApplication",
- "projectName": "weather-forecast-service"
- }
- ]
-}
diff --git a/demos/samples_java/weather_forcecast_service/Dockerfile b/demos/samples_java/weather_forcecast_service/Dockerfile
deleted file mode 100644
index 909d9796..00000000
--- a/demos/samples_java/weather_forcecast_service/Dockerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-# Stage 1: Build the application using Maven
-FROM maven:3.8.7-openjdk-18-slim AS build
-WORKDIR /app
-# Copy pom.xml and download dependencies first (caching)
-COPY pom.xml .
-RUN mvn dependency:go-offline
-# Copy the source code and build the application
-COPY src ./src
-RUN mvn clean package -DskipTests
-
-# Stage 2: Run the application using a slim JDK image
-FROM openjdk:17-jdk-slim
-WORKDIR /app
-# Copy the built jar from the previous stage
-COPY --from=build /app/target/weather-forecast-service-0.0.1-SNAPSHOT.jar app.jar
-# Expose the port on which the app runs (default Spring Boot is 8080)
-
-# Expose the application port and the debug port
-EXPOSE 8081
-EXPOSE 5005
-
-# Start the application with remote debugging enabled
-ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-jar", "app.jar"]
diff --git a/demos/samples_java/weather_forcecast_service/config.yaml b/demos/samples_java/weather_forcecast_service/config.yaml
deleted file mode 100644
index 68c3841d..00000000
--- a/demos/samples_java/weather_forcecast_service/config.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-version: v0.1.0
-
-listeners:
- ingress_traffic:
- address: 0.0.0.0
- port: 10000
- message_format: openai
- timeout: 30s
-
-# Centralized way to manage LLMs, manage keys, retry logic, failover and limits in a central way
-llm_providers:
- - access_key: $OPENAI_API_KEY
- model: openai/gpt-4o-mini
- default: true
-
-# Arch creates a round-robin load balancing between different endpoints, managed via the cluster subsystem.
-endpoints:
- weather_forecast_service:
- # value could be ip address or a hostname with port
- # this could also be a list of endpoints for load balancing
- # for example endpoint: [ ip1:port, ip2:port ]
- endpoint: host.docker.internal:18081
- # max time to wait for a connection to be established
- connect_timeout: 0.005s
-
-# default system prompt used by all prompt targets
-system_prompt: |
- You are a helpful weather assistant.
-
-prompt_targets:
- - name: weather_forecast
- description: get the weather forecast
- parameters:
- - name: location
- description: the location for which to get the weather forecast
- required: true
- type: string
- format: City, State
- - name: days
- description: the number of days for the forecast
- required: true
- type: int
- endpoint:
- name: weather_forecast_service
- path: /weather
- http_method: POST
-
-tracing:
- random_sampling: 100
- trace_arch_internal: true
diff --git a/demos/samples_java/weather_forcecast_service/docker-compose.yaml b/demos/samples_java/weather_forcecast_service/docker-compose.yaml
deleted file mode 100644
index b3df0266..00000000
--- a/demos/samples_java/weather_forcecast_service/docker-compose.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-services:
- weather_forecast_service:
- build:
- context: .
- dockerfile: Dockerfile
- ports:
- - "18081:8081"
- - "5005:5005"
-
- chatbot_ui:
- build:
- context: ../../shared/chatbot_ui
- dockerfile: Dockerfile
- ports:
- - "18080:8080"
- environment:
- - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config.yaml:/app/plano_config.yaml
-
- jaeger:
- build:
- context: ../../shared/jaeger
- ports:
- - "16686:16686"
- - "4317:4317"
- - "4318:4318"
diff --git a/demos/samples_java/weather_forcecast_service/pom.xml b/demos/samples_java/weather_forcecast_service/pom.xml
deleted file mode 100644
index db65d95a..00000000
--- a/demos/samples_java/weather_forcecast_service/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
- 4.0.0
-
- weather
- weather-forecast-service
- 0.0.1-SNAPSHOT
- jar
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.7.10
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.1
-
- true
- lines,vars,source
-
-
-
-
-
diff --git a/demos/samples_java/weather_forcecast_service/src/main/java/weather/WeatherForecastApplication.java b/demos/samples_java/weather_forcecast_service/src/main/java/weather/WeatherForecastApplication.java
deleted file mode 100644
index b31a3444..00000000
--- a/demos/samples_java/weather_forcecast_service/src/main/java/weather/WeatherForecastApplication.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// File: src/main/java/com/example/weather/WeatherForecastApplication.java
-package weather;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class WeatherForecastApplication {
- public static void main(String[] args) {
- SpringApplication.run(WeatherForecastApplication.class, args);
- }
-}
diff --git a/demos/samples_java/weather_forcecast_service/src/main/java/weather/controller/WeatherController.java b/demos/samples_java/weather_forcecast_service/src/main/java/weather/controller/WeatherController.java
deleted file mode 100644
index d7caeaf9..00000000
--- a/demos/samples_java/weather_forcecast_service/src/main/java/weather/controller/WeatherController.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package weather.controller;
-
-import weather.model.DayForecast;
-import weather.model.WeatherForecastResponse;
-import weather.model.WeatherRequest;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-@RestController
-public class WeatherController {
-
- private Random random = new Random();
-
- @PostMapping("/weather")
- public WeatherForecastResponse getRandomWeatherForecast(@RequestBody WeatherRequest req) {
- WeatherForecastResponse response = new WeatherForecastResponse();
- response.setLocation(req.getLocation());
- response.setUnits(req.getUnits());
-
- List forecasts = new ArrayList<>();
- for (int i = 0; i < req.getDays(); i++) {
- // Generate a random min temperature between 50 and 89 (inclusive)
- int minTemp = random.nextInt(90 - 50) + 50;
- // Generate a max temperature between (minTemp + 5) and (minTemp + 19)
- int maxTemp = random.nextInt(15) + (minTemp + 5);
-
- double finalMinTemp = minTemp;
- double finalMaxTemp = maxTemp;
-
- // Convert to Celsius if necessary
- if (req.getUnits().equalsIgnoreCase("celsius") || req.getUnits().equalsIgnoreCase("c")) {
- finalMinTemp = (minTemp - 32) * 5.0 / 9.0;
- finalMaxTemp = (maxTemp - 32) * 5.0 / 9.0;
- }
-
- DayForecast dayForecast = new DayForecast();
- dayForecast.setDate(LocalDate.now().plusDays(i).toString());
- dayForecast.setMin(finalMinTemp);
- dayForecast.setMax(finalMaxTemp);
- dayForecast.setUnits(req.getUnits());
-
- forecasts.add(dayForecast);
- }
- response.setDailyForecast(forecasts);
- return response;
- }
-}
diff --git a/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/DayForecast.java b/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/DayForecast.java
deleted file mode 100644
index 0077a3a7..00000000
--- a/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/DayForecast.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package weather.model;
-
-public class DayForecast {
- private String date;
- private String units;
- private double min;
- private double max;
-
- public DayForecast() {}
-
- // Getters and setters
- public String getDate() {
- return date;
- }
-
- public void setDate(String date) {
- this.date = date;
- }
-
- public String getUnits() {
- return units;
- }
-
- public void setUnits(String units) {
- this.units = units;
- }
-
- public double getMin() {
- return min;
- }
- public void setMin(double min) {
- this.min = min;
- }
- public double getMax() {
- return max;
- }
- public void setMax(double max) {
- this.max = max;
- }
-}
diff --git a/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/WeatherForecastResponse.java b/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/WeatherForecastResponse.java
deleted file mode 100644
index 3fc4d116..00000000
--- a/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/WeatherForecastResponse.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package weather.model;
-
-import java.util.List;
-
-public class WeatherForecastResponse {
- private String location;
- private String units;
- private List forecast;
-
- // Default Constructor
- public WeatherForecastResponse() {}
-
- // Getters and Setters
- public String getLocation() {
- return location;
- }
-
- public void setLocation(String location) {
- this.location = location;
- }
-
- public String getUnits() {
- return units;
- }
-
- public void setUnits(String units) {
- this.units = units;
- }
-
- public List getDailyForecast() {
- return forecast;
- }
-
- public void setDailyForecast(List forecast) {
- this.forecast = forecast;
- }
-}
diff --git a/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/WeatherRequest.java b/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/WeatherRequest.java
deleted file mode 100644
index 8b5e1340..00000000
--- a/demos/samples_java/weather_forcecast_service/src/main/java/weather/model/WeatherRequest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package weather.model;
-
-public class WeatherRequest {
- private String location;
- private int days = 7;
- private String units = "Farenheit";
-
- public WeatherRequest() {}
-
- // Getters and setters
- public String getLocation() {
- return location;
- }
- public void setLocation(String location) {
- this.location = location;
- }
- public int getDays() {
- return days;
- }
- public void setDays(int days) {
- this.days = days;
- }
- public String getUnits() {
- return units;
- }
- public void setUnits(String units) {
- this.units = units;
- }
-}
diff --git a/demos/samples_java/weather_forcecast_service/src/main/resources/application.properties b/demos/samples_java/weather_forcecast_service/src/main/resources/application.properties
deleted file mode 100644
index 4d360de1..00000000
--- a/demos/samples_java/weather_forcecast_service/src/main/resources/application.properties
+++ /dev/null
@@ -1 +0,0 @@
-server.port=8081
diff --git a/demos/samples_python/weather_forecast/docker-compose-honeycomb.yaml b/demos/samples_python/weather_forecast/docker-compose-honeycomb.yaml
deleted file mode 100644
index 5d5e1786..00000000
--- a/demos/samples_python/weather_forecast/docker-compose-honeycomb.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-services:
- weather_forecast_service:
- build:
- context: ./
- environment:
- - OLTP_HOST=http://otel-collector:4317
- extra_hosts:
- - "host.docker.internal:host-gateway"
- ports:
- - "18083:80"
-
- chatbot_ui:
- build:
- context: ../../shared/chatbot_ui
- ports:
- - "18080:8080"
- environment:
- # this is only because we are running the sample app in the same docker container environment as archgw
- - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config.yaml:/app/plano_config.yaml
-
- otel-collector:
- build:
- context: ../../shared/honeycomb/
- ports:
- - "4317:4317"
- - "4318:4318"
- volumes:
- - ../../shared/honeycomb/otel-collector-config.yaml:/etc/otel-collector-config.yaml
- env_file:
- - .env
- environment:
- - HONEYCOMB_API_KEY
-
- prometheus:
- build:
- context: ../../shared/prometheus
-
- grafana:
- build:
- context: ../../shared/grafana
- ports:
- - "3000:3000"
diff --git a/demos/samples_python/weather_forecast/docker-compose-jaeger.yaml b/demos/samples_python/weather_forecast/docker-compose-jaeger.yaml
deleted file mode 100644
index 1a64e8fa..00000000
--- a/demos/samples_python/weather_forecast/docker-compose-jaeger.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-services:
- weather_forecast_service:
- build:
- context: ./
- environment:
- - OLTP_HOST=http://jaeger:4317
- extra_hosts:
- - "host.docker.internal:host-gateway"
- ports:
- - "18083:80"
-
- chatbot_ui:
- build:
- context: ../../shared/chatbot_ui
- ports:
- - "18080:8080"
- environment:
- # this is only because we are running the sample app in the same docker container environemtn as archgw
- - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config.yaml:/app/plano_config.yaml
-
- jaeger:
- build:
- context: ../../shared/jaeger
- ports:
- - "16686:16686"
- - "4317:4317"
- - "4318:4318"
-
- prometheus:
- build:
- context: ../../shared/prometheus
-
- grafana:
- build:
- context: ../../shared/grafana
- ports:
- - "3000:3000"
diff --git a/demos/samples_python/weather_forecast/docker-compose-logfire.yaml b/demos/samples_python/weather_forecast/docker-compose-logfire.yaml
deleted file mode 100644
index db3363f4..00000000
--- a/demos/samples_python/weather_forecast/docker-compose-logfire.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-services:
- weather_forecast_service:
- build:
- context: ./
- environment:
- - OLTP_HOST=http://otel-collector:4317
- extra_hosts:
- - "host.docker.internal:host-gateway"
- ports:
- - "18083:80"
-
- chatbot_ui:
- build:
- context: ../../shared/chatbot_ui
- ports:
- - "18080:8080"
- environment:
- # this is only because we are running the sample app in the same docker container environment as archgw
- - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config.yaml:/app/plano_config.yaml
-
- otel-collector:
- build:
- context: ../../shared/logfire/
- ports:
- - "4317:4317"
- - "4318:4318"
- volumes:
- - ../../shared/logfire/otel-collector-config.yaml:/etc/otel-collector-config.yaml
- env_file:
- - .env
- environment:
- - LOGFIRE_API_KEY
-
- prometheus:
- build:
- context: ../../shared/prometheus
-
- grafana:
- build:
- context: ../../shared/grafana
- ports:
- - "3000:3000"
diff --git a/demos/samples_python/weather_forecast/docker-compose-signoz.yaml b/demos/samples_python/weather_forecast/docker-compose-signoz.yaml
deleted file mode 100644
index 4cfb56a9..00000000
--- a/demos/samples_python/weather_forecast/docker-compose-signoz.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-include:
- - ../../shared/signoz/docker-compose-minimal.yaml
-
-services:
- weather_forecast_service:
- build:
- context: .
- environment:
- - OLTP_HOST=http://otel-collector:4317
- extra_hosts:
- - "host.docker.internal:host-gateway"
- ports:
- - "18083:80"
-
- chatbot_ui:
- build:
- context: ../../shared/chatbot_ui
- ports:
- - "18080:8080"
- environment:
- # this is only because we are running the sample app in the same docker container environemtn as archgw
- - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config.yaml:/app/plano_config.yaml
-
- prometheus:
- build:
- context: ../../shared/prometheus
-
- grafana:
- build:
- context: ../../shared/grafana
- ports:
- - "3000:3000"
diff --git a/demos/shared/chatbot_ui/.vscode/launch.json b/demos/shared/chatbot_ui/.vscode/launch.json
deleted file mode 100644
index 9586ef4c..00000000
--- a/demos/shared/chatbot_ui/.vscode/launch.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- // Use IntelliSense to learn about possible attributes.
- // Hover to view descriptions of existing attributes.
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
- "version": "0.2.0",
- "configurations": [
- {
- "python": "${workspaceFolder}/venv/bin/python",
- "name": "chatbot-ui",
- "type": "debugpy",
- "request": "launch",
- "program": "run_stream.py",
- "console": "integratedTerminal",
- "env": {
- "LLM": "1",
- "CHAT_COMPLETION_ENDPOINT": "http://localhost:10000/v1",
- "STREAMING": "True",
- "PLANO_CONFIG": "../../samples_python/weather_forecast/plano_config.yaml"
- }
- },
- {
- "python": "${workspaceFolder}/venv/bin/python",
- "name": "chatbot-ui llm",
- "type": "debugpy",
- "request": "launch",
- "program": "run_stream.py",
- "console": "integratedTerminal",
- "env": {
- "LLM": "1",
- "CHAT_COMPLETION_ENDPOINT": "http://localhost:12000/v1",
- "STREAMING": "True",
- "PLANO_CONFIG": "../../samples_python/weather_forecast/plano_config.yaml"
- }
- },
- ]
-}
diff --git a/demos/shared/chatbot_ui/Dockerfile b/demos/shared/chatbot_ui/Dockerfile
deleted file mode 100644
index 588f9721..00000000
--- a/demos/shared/chatbot_ui/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-FROM python:3.12 AS base
-
-FROM base AS builder
-
-WORKDIR /src
-
-COPY requirements.txt /src/
-
-RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt
-
-FROM python:3.12-slim AS output
-
-COPY --from=builder /runtime /usr/local
-
-WORKDIR /app
-COPY *.py .
-
-CMD ["python", "run_stream.py"]
diff --git a/demos/shared/chatbot_ui/common.py b/demos/shared/chatbot_ui/common.py
deleted file mode 100644
index 278d86d1..00000000
--- a/demos/shared/chatbot_ui/common.py
+++ /dev/null
@@ -1,206 +0,0 @@
-from datetime import datetime
-import json
-import logging
-import os
-import yaml
-import gradio as gr
-from typing import List, Optional, Tuple
-from functools import partial
-
-logging.basicConfig(
- level=logging.INFO,
- format="%(asctime)s - %(levelname)s - %(message)s",
-)
-
-log = logging.getLogger(__name__)
-
-GRADIO_CSS_STYLE = """
-.json-container {
- height: 80vh !important;
- overflow-y: auto !important;
-}
-.chatbot {
- height: calc(80vh - 100px) !important;
- overflow-y: auto !important;
-}
-footer {visibility: hidden}
-"""
-
-
-def chat(
- query: Optional[str],
- conversation: Optional[List[Tuple[str, str]]],
- history: List[dict],
- client,
-):
- history.append({"role": "user", "content": query})
-
- try:
- response = client.chat.completions.create(
- # we select model from plano_config file
- model="None",
- messages=history,
- temperature=1.0,
- stream=True,
- )
- except Exception as e:
- # remove last user message in case of exception
- history.pop()
- log.info("Error calling gateway API: {}".format(e))
- raise gr.Error("Error calling gateway API: {}".format(e))
-
- conversation.append((query, ""))
-
- for chunk in response:
- tokens = process_stream_chunk(chunk, history)
- if tokens:
- conversation[-1] = (
- conversation[-1][0],
- conversation[-1][1] + tokens,
- )
-
- yield "", conversation, history
-
-
-def create_gradio_app(demo_description, client):
- with gr.Blocks(
- theme=gr.themes.Default(
- font_mono=[gr.themes.GoogleFont("IBM Plex Mono"), "Arial", "sans-serif"]
- ),
- fill_height=True,
- css=GRADIO_CSS_STYLE,
- ) as demo:
- with gr.Row(equal_height=True):
- history = gr.State([])
-
- with gr.Column(scale=1):
- gr.Markdown(demo_description),
- with gr.Accordion("Available Tools/APIs", open=True):
- with gr.Column(scale=1):
- gr.JSON(
- value=get_prompt_targets(),
- show_indices=False,
- elem_classes="json-container",
- min_height="80vh",
- )
-
- with gr.Column(scale=2):
- chatbot = gr.Chatbot(
- label="Plano Chatbot",
- elem_classes="chatbot",
- )
- textbox = gr.Textbox(
- show_label=False,
- placeholder="Enter text and press enter",
- autofocus=True,
- elem_classes="textbox",
- )
- chat_with_client = partial(chat, client=client)
-
- textbox.submit(
- chat_with_client,
- [textbox, chatbot, history],
- [textbox, chatbot, history],
- )
-
- return demo
-
-
-def process_stream_chunk(chunk, history):
- delta = chunk.choices[0].delta
- if delta.role and delta.role != history[-1]["role"]:
- # create new history item if role changes
- # this is likely due to Plano tool call and api response
- history.append({"role": delta.role})
-
- history[-1]["model"] = chunk.model
- # append tool calls to history if there are any in the chunk
- if delta.tool_calls:
- history[-1]["tool_calls"] = delta.tool_calls
-
- if delta.content:
- # append content to the last history item
- if history[-1]["model"] != "Arch-Function-Chat":
- history[-1]["content"] = history[-1].get("content", "") + delta.content
- # yield content if it is from assistant
- if history[-1]["model"] == "Arch-Function":
- return None
- if history[-1]["role"] == "assistant":
- return delta.content
-
- return None
-
-
-def convert_prompt_target_to_openai_format(target):
- tool = {
- "description": target["description"],
- "parameters": {"type": "object", "properties": {}, "required": []},
- }
-
- if "parameters" in target:
- for param_info in target["parameters"]:
- parameter = {
- "type": param_info["type"],
- "description": param_info["description"],
- }
-
- for key in ["default", "format", "enum", "items", "minimum", "maximum"]:
- if key in param_info:
- parameter[key] = param_info[key]
-
- tool["parameters"]["properties"][param_info["name"]] = parameter
-
- required = param_info.get("required", False)
- if required:
- tool["parameters"]["required"].append(param_info["name"])
-
- return {"name": target["name"], "info": tool}
-
-
-def get_prompt_targets():
- try:
- with open(os.getenv("PLANO_CONFIG", "config.yaml"), "r") as file:
- config = yaml.safe_load(file)
-
- available_tools = []
- if "prompt_targets" in config:
- for target in config["prompt_targets"]:
- if not target.get("default", False):
- available_tools.append(
- convert_prompt_target_to_openai_format(target)
- )
-
- return {tool["name"]: tool["info"] for tool in available_tools}
- elif "llm_providers" in config:
- return config["llm_providers"]
-
- except Exception as e:
- log.info(e)
- return None
-
-
-def get_llm_models():
- try:
- with open(os.getenv("PLANO_CONFIG", "config.yaml"), "r") as file:
- config = yaml.safe_load(file)
-
- available_models = [""]
- default_llm = None
- for llm_providers in config["llm_providers"]:
- if llm_providers.get("default", False):
- default_llm = llm_providers["name"]
- else:
- available_models.append(llm_providers["name"])
-
- # place default model at the beginning of the list
- if default_llm:
- available_models.insert(0, default_llm)
- return available_models
- except Exception as e:
- log.info(e)
- return []
-
-
-def format_log(message):
- time_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S,%f")[:-3]
- return f"{time_now} - {message}"
diff --git a/demos/shared/chatbot_ui/requirements.txt b/demos/shared/chatbot_ui/requirements.txt
deleted file mode 100644
index 7d94088a..00000000
--- a/demos/shared/chatbot_ui/requirements.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-gradio==5.3.0
-huggingface_hub<1.0.0
-async_timeout==4.0.3
-loguru==0.7.2
-asyncio==3.4.3
-httpx==0.27.0
-python-dotenv==1.0.1
-pydantic==2.8.2
-openai==1.54.0
diff --git a/demos/shared/chatbot_ui/run_stream.py b/demos/shared/chatbot_ui/run_stream.py
deleted file mode 100644
index 89448355..00000000
--- a/demos/shared/chatbot_ui/run_stream.py
+++ /dev/null
@@ -1,160 +0,0 @@
-import json
-import os
-import logging
-import yaml
-import gradio as gr
-
-from typing import List, Optional, Tuple
-from openai import OpenAI
-from dotenv import load_dotenv
-
-from common import format_log, get_llm_models, get_prompt_targets, process_stream_chunk
-
-load_dotenv()
-
-
-logging.basicConfig(
- level=logging.INFO,
- format="%(asctime)s - %(levelname)s - %(message)s",
-)
-
-log = logging.getLogger(__name__)
-
-CHAT_COMPLETION_ENDPOINT = os.getenv("CHAT_COMPLETION_ENDPOINT")
-log.info(f"CHAT_COMPLETION_ENDPOINT: {CHAT_COMPLETION_ENDPOINT}")
-
-
-CSS_STYLE = """
-.json-container {
- height: 95vh !important;
- overflow-y: auto !important;
-}
-.chatbot {
- height: calc(95vh - 100px) !important;
- overflow-y: auto !important;
-}
-footer {visibility: hidden}
-"""
-
-
-def chat(
- query: Optional[str],
- conversation: Optional[List[Tuple[str, str]]],
- history: List[dict],
- debug_output: str,
- model_selector: str,
-):
- history.append({"role": "user", "content": query})
-
- if debug_output is None:
- debug_output = ""
-
- try:
- headers = {}
- if model_selector and model_selector != "":
- headers["x-arch-llm-provider-hint"] = model_selector
- client = OpenAI(
- api_key="None",
- base_url=CHAT_COMPLETION_ENDPOINT,
- default_headers=headers,
- )
- response = client.chat.completions.create(
- # we select model from arch_config file
- model="None",
- messages=history,
- temperature=1.0,
- stream=True,
- )
- except Exception as e:
- # remove last user message in case of exception
- history.pop()
- log.info("Error calling gateway API: {}".format(e))
- raise gr.Error("Error calling gateway API: {}".format(e))
-
- conversation.append((query, ""))
-
- model_is_set = False
- for chunk in response:
- tokens = process_stream_chunk(chunk, history)
- if tokens and not model_is_set:
- model_is_set = True
- model = history[-1]["model"]
- debug_output = debug_output + "\n" + format_log(f"model: {model}")
- if tokens:
- conversation[-1] = (
- conversation[-1][0],
- conversation[-1][1] + tokens,
- )
-
- yield "", conversation, history, debug_output, model_selector
-
- # update assistant response to have correct format
- # arch-fc 1.1 expects following format:
- # {
- # "response": "",
- # }
- # and this entire block needs to be encoded in ```json\n{json_encoded_content}\n```
-
- if not history[-1]["model"].startswith("Arch"):
- assistant_response = {
- "response": history[-1]["content"],
- }
- history[-1]["content"] = "```json\n{}\n```".format(
- json.dumps(assistant_response)
- )
- log.info("history: {}".format(json.dumps(history)))
-
-
-def main():
- with gr.Blocks(
- theme=gr.themes.Default(
- font_mono=[gr.themes.GoogleFont("IBM Plex Mono"), "Arial", "sans-serif"]
- ),
- fill_height=True,
- css=CSS_STYLE,
- ) as demo:
- with gr.Row(equal_height=True):
- history = gr.State([])
-
- with gr.Column(scale=1):
- with gr.Accordion("See available tools", open=False):
- with gr.Column(scale=1):
- gr.JSON(
- value=get_prompt_targets(),
- show_indices=False,
- elem_classes="json-container",
- min_height="50vh",
- )
- model_selector_textbox = gr.Dropdown(
- get_llm_models(),
- label="override model",
- elem_classes="dropdown",
- )
- debug_output = gr.TextArea(
- label="debug output",
- elem_classes="debug_output",
- )
-
- with gr.Column(scale=2):
- chatbot = gr.Chatbot(
- label="Arch Chatbot",
- elem_classes="chatbot",
- )
- textbox = gr.Textbox(
- show_label=False,
- placeholder="Enter text and press enter",
- autofocus=True,
- elem_classes="textbox",
- )
-
- textbox.submit(
- chat,
- [textbox, chatbot, history, debug_output, model_selector_textbox],
- [textbox, chatbot, history, debug_output, model_selector_textbox],
- )
-
- demo.launch(server_name="0.0.0.0", server_port=8080, show_error=True, debug=True)
-
-
-if __name__ == "__main__":
- main()
diff --git a/demos/shared/grafana/Dockerfile b/demos/shared/grafana/Dockerfile
deleted file mode 100644
index 40ec1b54..00000000
--- a/demos/shared/grafana/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM grafana/grafana:latest
-
-FROM grafana/grafana:latest
-
-# Set environment variables
-ENV GF_SECURITY_ADMIN_USER=admin
-ENV GF_SECURITY_ADMIN_PASSWORD=grafana
-
-# Copy provisioning files
-COPY ./datasource.yaml /etc/grafana/provisioning/datasources/datasource.yaml
-COPY ./dashboard.yaml /etc/grafana/provisioning/dashboards/main.yaml
-COPY ./dashboards /var/lib/grafana/dashboards
-
-# Expose Grafana port
-EXPOSE 3000
diff --git a/demos/shared/grafana/dashboard.yaml b/demos/shared/grafana/dashboard.yaml
deleted file mode 100644
index fd66a479..00000000
--- a/demos/shared/grafana/dashboard.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-apiVersion: 1
-
-providers:
- - name: "Dashboard provider"
- orgId: 1
- type: file
- disableDeletion: false
- updateIntervalSeconds: 10
- allowUiUpdates: false
- options:
- path: /var/lib/grafana/dashboards
- foldersFromFilesStructure: true
diff --git a/demos/shared/grafana/dashboards/envoy_overview.json b/demos/shared/grafana/dashboards/envoy_overview.json
deleted file mode 100644
index e74e1fa1..00000000
--- a/demos/shared/grafana/dashboards/envoy_overview.json
+++ /dev/null
@@ -1,794 +0,0 @@
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 1,
- "id": 1,
- "links": [],
- "panels": [
- {
- "datasource": {
- "default": true,
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 9,
- "w": 5,
- "x": 0,
- "y": 0
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "percentChangeColorMode": "standard",
- "reduceOptions": {
- "calcs": ["lastNotNull"],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "disableTextWrap": false,
- "editorMode": "builder",
- "exemplar": false,
- "expr": "envoy_cluster_upstream_rq_completed{envoy_cluster_name=~\"openai|api_server\"}",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "instant": true,
- "legendFormat": "{{envoy_cluster_name}}",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "# of Completed Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "barWidthFactor": 0.6,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum by(le) (rate(input_sequence_length_bucket[1h])))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Input Sequence Length"
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 9,
- "w": 9,
- "x": 5,
- "y": 0
- },
- "id": 7,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "disableTextWrap": false,
- "editorMode": "code",
- "expr": "histogram_quantile(0.9, sum by(le) (rate(input_sequence_length_bucket[5m])))",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "input sequence length (p90)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "default": true,
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "barWidthFactor": 0.6,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum(rate(output_sequence_length_bucket[1h])) by(le))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Output Sequence Length"
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 9,
- "w": 10,
- "x": 14,
- "y": 0
- },
- "id": 3,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "expr": "histogram_quantile(0.9, sum(rate(output_sequence_length_bucket[5m])) by(le))",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "instant": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "output sequence length (p90)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "barWidthFactor": 0.6,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum by(le) (rate(time_to_first_token_bucket[1h])))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Time to First Token"
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 14,
- "w": 11,
- "x": 0,
- "y": 9
- },
- "id": 8,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "disableTextWrap": false,
- "editorMode": "code",
- "expr": "histogram_quantile(0.5, sum by(le) (rate(time_to_first_token_bucket[5m])))",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "time to first token (p90)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "default": true,
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "barWidthFactor": 0.6,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum by(le) (rate(request_latency_bucket[1h])))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Request Latency"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum(rate(time_to_first_token_bucket[60m])) by (le))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Time to First Token"
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 14,
- "w": 13,
- "x": 11,
- "y": 9
- },
- "id": 1,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "disableTextWrap": false,
- "editorMode": "builder",
- "expr": "histogram_quantile(0.5, sum by(le) (rate(request_latency_bucket[5m])))",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": false,
- "instant": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "request latency (p90)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "barWidthFactor": 0.6,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum by(le) (rate(time_per_output_token_bucket[1h])))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Time per Output Token"
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 13,
- "w": 12,
- "x": 0,
- "y": 23
- },
- "id": 9,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "disableTextWrap": false,
- "editorMode": "builder",
- "expr": "histogram_quantile(0.5, sum by(le) (rate(time_per_output_token_bucket[1h])))",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Time per Output Token (50p)",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "PBFA97CFB590B2093"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "barWidthFactor": 0.6,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "histogram_quantile(0.5, sum by(le) (rate(tokens_per_second_bucket[1h])))"
- },
- "properties": [
- {
- "id": "displayName",
- "value": "Tokens per Second"
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 13,
- "w": 12,
- "x": 12,
- "y": 23
- },
- "id": 10,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "11.3.0",
- "targets": [
- {
- "disableTextWrap": false,
- "editorMode": "builder",
- "expr": "histogram_quantile(0.5, sum by(le) (rate(tokens_per_second_bucket[1h])))",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Tokens per Second(50p)",
- "type": "timeseries"
- }
- ],
- "preload": false,
- "refresh": "",
- "schemaVersion": 40,
- "tags": [],
- "templating": {
- "list": []
- },
- "time": {
- "from": "now-15m",
- "to": "now"
- },
- "timepicker": {},
- "timezone": "browser",
- "title": "Plano Gateway Dashboard",
- "uid": "adt6uhx5lk8aob",
- "version": 1,
- "weekStart": ""
-}
diff --git a/demos/shared/grafana/datasource.yaml b/demos/shared/grafana/datasource.yaml
deleted file mode 100644
index 44999d46..00000000
--- a/demos/shared/grafana/datasource.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-apiVersion: 1
-
-datasources:
- - name: Prometheus
- type: prometheus
- url: http://prometheus:9090
- isDefault: true
- access: proxy
- editable: true
diff --git a/demos/shared/honeycomb/Dockerfile b/demos/shared/honeycomb/Dockerfile
deleted file mode 100644
index eec82c08..00000000
--- a/demos/shared/honeycomb/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM otel/opentelemetry-collector:latest
-
-COPY otel-collector-config.yaml /etc/otel-collector-config.yaml
-
-ENTRYPOINT ["/otelcol", "--config=/etc/otel-collector-config.yaml"]
diff --git a/demos/shared/honeycomb/otel-collector-config.yaml b/demos/shared/honeycomb/otel-collector-config.yaml
deleted file mode 100644
index e261be84..00000000
--- a/demos/shared/honeycomb/otel-collector-config.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-receivers:
- otlp:
- protocols:
- grpc:
- endpoint: 0.0.0.0:4317
- http:
- endpoint: 0.0.0.0:4318
-
-exporters:
- otlp:
- endpoint: "api.honeycomb.io:443"
- headers:
- "x-honeycomb-team": "${HONEYCOMB_API_KEY}"
-
-processors:
- batch:
- timeout: 5s
-
-service:
- pipelines:
- traces:
- receivers: [otlp]
- processors: [batch]
- exporters: [otlp]
diff --git a/demos/shared/logfire/Dockerfile b/demos/shared/logfire/Dockerfile
deleted file mode 100644
index eec82c08..00000000
--- a/demos/shared/logfire/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM otel/opentelemetry-collector:latest
-
-COPY otel-collector-config.yaml /etc/otel-collector-config.yaml
-
-ENTRYPOINT ["/otelcol", "--config=/etc/otel-collector-config.yaml"]
diff --git a/demos/shared/logfire/otel-collector-config.yaml b/demos/shared/logfire/otel-collector-config.yaml
deleted file mode 100644
index d26939e4..00000000
--- a/demos/shared/logfire/otel-collector-config.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-receivers:
- otlp:
- protocols:
- grpc:
- endpoint: 0.0.0.0:4317
- http:
- endpoint: 0.0.0.0:4318
-
-exporters:
- otlphttp:
- endpoint: "https://logfire-api.pydantic.dev"
- headers:
- Authorization: "${LOGFIRE_API_KEY}"
-
-processors:
- batch:
- timeout: 5s
-
-service:
- pipelines:
- traces:
- receivers: [otlp]
- processors: [batch]
- exporters: [otlphttp]
diff --git a/demos/shared/prometheus/Dockerfile b/demos/shared/prometheus/Dockerfile
deleted file mode 100644
index 1c245059..00000000
--- a/demos/shared/prometheus/Dockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-
-FROM prom/prometheus:latest
-
-# Set the command to run Prometheus with the specified configuration file
-CMD ["--config.file=/etc/prometheus/prometheus.yaml"]
-
-# Copy the Prometheus configuration files
-COPY ./prometheus.yaml /etc/prometheus/prometheus.yaml
-
-# Expose Prometheus port
-EXPOSE 9090
diff --git a/demos/shared/prometheus/prometheus.yaml b/demos/shared/prometheus/prometheus.yaml
deleted file mode 100644
index b0e1a7bb..00000000
--- a/demos/shared/prometheus/prometheus.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-global:
- scrape_interval: 15s
- scrape_timeout: 10s
- evaluation_interval: 15s
-alerting:
- alertmanagers:
- - static_configs:
- - targets: []
- scheme: http
- timeout: 10s
- api_version: v2
-scrape_configs:
- - job_name: envoy
- honor_timestamps: true
- scrape_interval: 15s
- scrape_timeout: 10s
- metrics_path: /stats
- scheme: http
- static_configs:
- - targets:
- - host.docker.internal:19901
- params:
- format: ["prometheus"]
diff --git a/demos/shared/signoz/alertmanager.yml b/demos/shared/signoz/alertmanager.yml
deleted file mode 100644
index f59b6655..00000000
--- a/demos/shared/signoz/alertmanager.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-global:
- resolve_timeout: 1m
- slack_api_url: 'https://hooks.slack.com/services/xxx'
-
-route:
- receiver: 'slack-notifications'
-
-receivers:
-- name: 'slack-notifications'
- slack_configs:
- - channel: '#alerts'
- send_resolved: true
- icon_url: https://avatars3.githubusercontent.com/u/3380462
- title: |-
- [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }}
- {{- if gt (len .CommonLabels) (len .GroupLabels) -}}
- {{" "}}(
- {{- with .CommonLabels.Remove .GroupLabels.Names }}
- {{- range $index, $label := .SortedPairs -}}
- {{ if $index }}, {{ end }}
- {{- $label.Name }}="{{ $label.Value -}}"
- {{- end }}
- {{- end -}}
- )
- {{- end }}
- text: >-
- {{ range .Alerts -}}
- *Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - `{{ .Labels.severity }}`{{ end }}
-
- *Description:* {{ .Annotations.description }}
-
- *Details:*
- {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
- {{ end }}
- {{ end }}
diff --git a/demos/shared/signoz/alerts.yml b/demos/shared/signoz/alerts.yml
deleted file mode 100644
index 810a2075..00000000
--- a/demos/shared/signoz/alerts.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-groups:
-- name: ExampleCPULoadGroup
- rules:
- - alert: HighCpuLoad
- expr: system_cpu_load_average_1m > 0.1
- for: 0m
- labels:
- severity: warning
- annotations:
- summary: High CPU load
- description: "CPU load is > 0.1\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
diff --git a/demos/shared/signoz/clickhouse-cluster.xml b/demos/shared/signoz/clickhouse-cluster.xml
deleted file mode 100644
index 8b475ffe..00000000
--- a/demos/shared/signoz/clickhouse-cluster.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
- zookeeper-1
- 2181
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- clickhouse
- 9000
-
-
-
-
-
-
-
-
diff --git a/demos/shared/signoz/clickhouse-config.xml b/demos/shared/signoz/clickhouse-config.xml
deleted file mode 100644
index 12086ec8..00000000
--- a/demos/shared/signoz/clickhouse-config.xml
+++ /dev/null
@@ -1,1143 +0,0 @@
-
-
-
-
-
- information
-
- json
-
- /var/log/clickhouse-server/clickhouse-server.log
- /var/log/clickhouse-server/clickhouse-server.err.log
-
- 1000M
- 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8123
-
-
- 9000
-
-
- 9004
-
-
- 9005
-
-
-
-
-
-
-
-
-
-
-
- 9009
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4096
-
-
- 3
-
-
-
-
- false
-
-
- /path/to/ssl_cert_file
- /path/to/ssl_key_file
-
-
- false
-
-
- /path/to/ssl_ca_cert_file
-
-
- none
-
-
- 0
-
-
- -1
- -1
-
-
- false
-
-
-
-
-
-
-
-
-
-
- none
- true
- true
- sslv2,sslv3
- true
-
-
-
- true
- true
- sslv2,sslv3
- true
-
-
-
- RejectCertificateHandler
-
-
-
-
-
-
-
-
- 100
-
-
- 0
-
-
-
- 10000
-
-
-
-
-
- 0.9
-
-
- 4194304
-
-
- 0
-
-
-
-
-
- 8589934592
-
-
- 5368709120
-
-
-
- 1000
-
-
- 134217728
-
-
- 10000
-
-
- /var/lib/clickhouse/
-
-
- /var/lib/clickhouse/tmp/
-
-
-
- `
-
-
-
-
-
- /var/lib/clickhouse/user_files/
-
-
-
-
-
-
-
-
-
-
-
-
- users.xml
-
-
-
- /var/lib/clickhouse/access/
-
-
-
-
-
-
- default
-
-
-
-
-
-
-
-
-
-
-
- default
-
-
-
-
-
-
-
-
- true
-
-
- false
-
- ' | sed -e 's|.*>\(.*\)<.*|\1|')
- wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
- apt install --no-install-recommends -f ./clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
- clickhouse-jdbc-bridge &
-
- * [CentOS/RHEL]
- export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
- export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '' | sed -e 's|.*>\(.*\)<.*|\1|')
- wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
- yum localinstall -y clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
- clickhouse-jdbc-bridge &
-
- Please refer to https://github.com/ClickHouse/clickhouse-jdbc-bridge#usage for more information.
- ]]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 01
- example01-01-1
-
-
-
-
-
- 3600
-
-
-
- 3600
-
-
- 60
-
-
-
-
-
-
-
-
-
-
-
-
- system
-
-
- toYYYYMM(event_date)
-
-
-
-
-
- 7500
-
-
-
-
- system
-
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
- system
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
- system
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
- system
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
-
-
- system
-
- 7500
- 1000
-
-
-
-
- system
-
-
- 7000
-
-
-
-
-
-
- engine MergeTree
- partition by toYYYYMM(finish_date)
- order by (finish_date, finish_time_us, trace_id)
-
- system
-
- 7500
-
-
-
-
-
- system
-
-
-
- 1000
-
-
-
-
-
-
-
- system
-
-
- toYYYYMM(event_date)
- 7500
-
-
-
-
-
-
-
-
-
- *_dictionary.xml
-
-
- *function.xml
- /var/lib/clickhouse/user_scripts/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /clickhouse/task_queue/ddl
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- click_cost
- any
-
- 0
- 3600
-
-
- 86400
- 60
-
-
-
- max
-
- 0
- 60
-
-
- 3600
- 300
-
-
- 86400
- 3600
-
-
-
-
-
- /var/lib/clickhouse/format_schemas/
-
-
-
-
- hide encrypt/decrypt arguments
- ((?:aes_)?(?:encrypt|decrypt)(?:_mysql)?)\s*\(\s*(?:'(?:\\'|.)+'|.*?)\s*\)
-
- \1(???)
-
-
-
-
-
-
-
-
-
- false
-
- false
-
-
- https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277
-
-
-
-
-
-
-
-
-
-
- 268435456
- true
-
-
diff --git a/demos/shared/signoz/clickhouse-storage.xml b/demos/shared/signoz/clickhouse-storage.xml
deleted file mode 100644
index 54ec4976..00000000
--- a/demos/shared/signoz/clickhouse-storage.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
- 10485760
-
-
- s3
-
- https://BUCKET-NAME.s3-REGION-NAME.amazonaws.com/data/
- ACCESS-KEY-ID
- SECRET-ACCESS-KEY
-
-
-
-
-
-
-
-
-
-
- default
-
-
- s3
- 0
-
-
-
-
-
-
diff --git a/demos/shared/signoz/clickhouse-users.xml b/demos/shared/signoz/clickhouse-users.xml
deleted file mode 100644
index f1856207..00000000
--- a/demos/shared/signoz/clickhouse-users.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
- 10000000000
-
-
- random
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
- ::/0
-
-
-
- default
-
-
- default
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3600
-
-
- 0
- 0
- 0
- 0
- 0
-
-
-
-
diff --git a/demos/shared/signoz/custom-function.xml b/demos/shared/signoz/custom-function.xml
deleted file mode 100644
index b2b3f91a..00000000
--- a/demos/shared/signoz/custom-function.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- executable
- histogramQuantile
- Float64
-
- Array(Float64)
- buckets
-
-
- Array(Float64)
- counts
-
-
- Float64
- quantile
-
- CSV
- ./histogramQuantile
-
-
diff --git a/demos/shared/signoz/docker-compose-core.yaml b/demos/shared/signoz/docker-compose-core.yaml
deleted file mode 100644
index ec9e0697..00000000
--- a/demos/shared/signoz/docker-compose-core.yaml
+++ /dev/null
@@ -1,133 +0,0 @@
-version: "2.4"
-
-include:
- - test-app-docker-compose.yaml
-
-services:
- zookeeper-1:
- image: bitnami/zookeeper:3.7.1
- container_name: signoz-zookeeper-1
- hostname: zookeeper-1
- user: root
- ports:
- - "2181:2181"
- - "2888:2888"
- - "3888:3888"
- volumes:
- - ./data/zookeeper-1:/bitnami/zookeeper
- environment:
- - ZOO_SERVER_ID=1
- # - ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper-2:2888:3888,zookeeper-3:2888:3888
- - ALLOW_ANONYMOUS_LOGIN=yes
- - ZOO_AUTOPURGE_INTERVAL=1
-
- clickhouse:
- image: clickhouse/clickhouse-server:24.1.2-alpine
- container_name: signoz-clickhouse
- # ports:
- # - "9000:9000"
- # - "8123:8123"
- tty: true
- volumes:
- - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- - ./data/clickhouse/:/var/lib/clickhouse/
- - ./user_scripts:/var/lib/clickhouse/user_scripts/
- restart: on-failure
- logging:
- options:
- max-size: 50m
- max-file: "3"
- healthcheck:
- # "clickhouse", "client", "-u ${CLICKHOUSE_USER}", "--password ${CLICKHOUSE_PASSWORD}", "-q 'SELECT 1'"
- test:
- [
- "CMD",
- "wget",
- "--spider",
- "-q",
- "0.0.0.0:8123/ping"
- ]
- interval: 30s
- timeout: 5s
- retries: 3
-
- alertmanager:
- container_name: signoz-alertmanager
- image: signoz/alertmanager:0.23.7
- volumes:
- - ./data/alertmanager:/data
- depends_on:
- query-service:
- condition: service_healthy
- restart: on-failure
- command:
- - --queryService.url=http://query-service:8085
- - --storage.path=/data
-
- otel-collector-migrator:
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.111.5}
- container_name: otel-migrator
- command:
- - "--dsn=tcp://clickhouse:9000"
- depends_on:
- clickhouse:
- condition: service_healthy
- # clickhouse-2:
- # condition: service_healthy
- # clickhouse-3:
- # condition: service_healthy
-
- # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
- otel-collector:
- container_name: signoz-otel-collector
- image: signoz/signoz-otel-collector:0.111.5
- command:
- [
- "--config=/etc/otel-collector-config.yaml",
- "--manager-config=/etc/manager-config.yaml",
- "--copy-path=/var/tmp/collector-config.yaml",
- "--feature-gates=-pkg.translator.prometheus.NormalizeName"
- ]
- # user: root # required for reading docker container logs
- volumes:
- - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
- - ./otel-collector-opamp-config.yaml:/etc/manager-config.yaml
- - /var/lib/docker/containers:/var/lib/docker/containers:ro
- - /:/hostfs:ro
- environment:
- - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- ports:
- # - "1777:1777" # pprof extension
- - "4317:4317" # OTLP gRPC receiver
- - "4318:4318" # OTLP HTTP receiver
- # - "8888:8888" # OtelCollector internal metrics
- # - "8889:8889" # signoz spanmetrics exposed by the agent
- # - "9411:9411" # Zipkin port
- # - "13133:13133" # health check extension
- # - "14250:14250" # Jaeger gRPC
- # - "14268:14268" # Jaeger thrift HTTP
- # - "55678:55678" # OpenCensus receiver
- # - "55679:55679" # zPages extension
- restart: on-failure
- depends_on:
- clickhouse:
- condition: service_healthy
- otel-collector-migrator:
- condition: service_completed_successfully
- query-service:
- condition: service_healthy
-
- logspout:
- image: "gliderlabs/logspout:v3.2.14"
- container_name: signoz-logspout
- volumes:
- - /etc/hostname:/etc/host_hostname:ro
- - /var/run/docker.sock:/var/run/docker.sock
- command: syslog+tcp://otel-collector:2255
- depends_on:
- - otel-collector
- restart: on-failure
diff --git a/demos/shared/signoz/docker-compose-local.yaml b/demos/shared/signoz/docker-compose-local.yaml
deleted file mode 100644
index 7effc129..00000000
--- a/demos/shared/signoz/docker-compose-local.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-version: "2.4"
-
-services:
- query-service:
- hostname: query-service
- build:
- context: "../../../"
- dockerfile: "./pkg/query-service/Dockerfile"
- args:
- LDFLAGS: ""
- TARGETPLATFORM: "${GOOS}/${GOARCH}"
- container_name: signoz-query-service
- environment:
- - ClickHouseUrl=tcp://clickhouse:9000
- - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/
- - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db
- - DASHBOARDS_PATH=/root/config/dashboards
- - STORAGE=clickhouse
- - GODEBUG=netdns=go
- - TELEMETRY_ENABLED=true
- volumes:
- - ./prometheus.yml:/root/config/prometheus.yml
- - ../dashboards:/root/config/dashboards
- - ./data/signoz/:/var/lib/signoz/
- command:
- [
- "-config=/root/config/prometheus.yml",
- "--use-logs-new-schema=true"
- ]
- ports:
- - "6060:6060"
- - "8080:8080"
- restart: on-failure
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--spider",
- "-q",
- "localhost:8080/api/v1/health"
- ]
- interval: 30s
- timeout: 5s
- retries: 3
- depends_on:
- clickhouse:
- condition: service_healthy
-
- frontend:
- build:
- context: "../../../frontend"
- dockerfile: "./Dockerfile"
- args:
- TARGETOS: "${GOOS}"
- TARGETPLATFORM: "${GOARCH}"
- container_name: signoz-frontend
- environment:
- - FRONTEND_API_ENDPOINT=http://query-service:8080
- restart: on-failure
- depends_on:
- - alertmanager
- - query-service
- ports:
- - "3301:3301"
- volumes:
- - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf
diff --git a/demos/shared/signoz/docker-compose-minimal.yaml b/demos/shared/signoz/docker-compose-minimal.yaml
deleted file mode 100644
index d4861a41..00000000
--- a/demos/shared/signoz/docker-compose-minimal.yaml
+++ /dev/null
@@ -1,296 +0,0 @@
-x-clickhouse-defaults: &clickhouse-defaults
- restart: on-failure
- # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab
- image: clickhouse/clickhouse-server:24.1.2-alpine
- tty: true
- depends_on:
- - zookeeper-1
- # - zookeeper-2
- # - zookeeper-3
- logging:
- options:
- max-size: 50m
- max-file: "3"
- healthcheck:
- # "clickhouse", "client", "-u ${CLICKHOUSE_USER}", "--password ${CLICKHOUSE_PASSWORD}", "-q 'SELECT 1'"
- test:
- [
- "CMD",
- "wget",
- "--spider",
- "-q",
- "0.0.0.0:8123/ping"
- ]
- interval: 30s
- timeout: 5s
- retries: 3
- ulimits:
- nproc: 65535
- nofile:
- soft: 262144
- hard: 262144
-
-x-db-depend: &db-depend
- depends_on:
- clickhouse:
- condition: service_healthy
- otel-collector-migrator-sync:
- condition: service_completed_successfully
- # clickhouse-2:
- # condition: service_healthy
- # clickhouse-3:
- # condition: service_healthy
-
-services:
-
- zookeeper-1:
- image: bitnami/zookeeper:3.7.1
- container_name: signoz-zookeeper-1
- hostname: zookeeper-1
- user: root
- ports:
- - "2181:2181"
- - "2888:2888"
- - "3888:3888"
- volumes:
- - ./data/zookeeper-1:/bitnami/zookeeper
- environment:
- - ZOO_SERVER_ID=1
- # - ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper-2:2888:3888,zookeeper-3:2888:3888
- - ALLOW_ANONYMOUS_LOGIN=yes
- - ZOO_AUTOPURGE_INTERVAL=1
-
- # zookeeper-2:
- # image: bitnami/zookeeper:3.7.0
- # container_name: signoz-zookeeper-2
- # hostname: zookeeper-2
- # user: root
- # ports:
- # - "2182:2181"
- # - "2889:2888"
- # - "3889:3888"
- # volumes:
- # - ./data/zookeeper-2:/bitnami/zookeeper
- # environment:
- # - ZOO_SERVER_ID=2
- # - ZOO_SERVERS=zookeeper-1:2888:3888,0.0.0.0:2888:3888,zookeeper-3:2888:3888
- # - ALLOW_ANONYMOUS_LOGIN=yes
- # - ZOO_AUTOPURGE_INTERVAL=1
-
- # zookeeper-3:
- # image: bitnami/zookeeper:3.7.0
- # container_name: signoz-zookeeper-3
- # hostname: zookeeper-3
- # user: root
- # ports:
- # - "2183:2181"
- # - "2890:2888"
- # - "3890:3888"
- # volumes:
- # - ./data/zookeeper-3:/bitnami/zookeeper
- # environment:
- # - ZOO_SERVER_ID=3
- # - ZOO_SERVERS=zookeeper-1:2888:3888,zookeeper-2:2888:3888,0.0.0.0:2888:3888
- # - ALLOW_ANONYMOUS_LOGIN=yes
- # - ZOO_AUTOPURGE_INTERVAL=1
-
- clickhouse:
- <<: *clickhouse-defaults
- container_name: signoz-clickhouse
- hostname: clickhouse
- ports:
- - "9000:9000"
- - "8123:8123"
- - "9181:9181"
- volumes:
- - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- - ./data/clickhouse/:/var/lib/clickhouse/
- - ./user_scripts:/var/lib/clickhouse/user_scripts/
-
- # clickhouse-2:
- # <<: *clickhouse-defaults
- # container_name: signoz-clickhouse-2
- # hostname: clickhouse-2
- # ports:
- # - "9001:9000"
- # - "8124:8123"
- # - "9182:9181"
- # volumes:
- # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- # - ./data/clickhouse-2/:/var/lib/clickhouse/
- # - ./user_scripts:/var/lib/clickhouse/user_scripts/
-
-
- # clickhouse-3:
- # <<: *clickhouse-defaults
- # container_name: signoz-clickhouse-3
- # hostname: clickhouse-3
- # ports:
- # - "9002:9000"
- # - "8125:8123"
- # - "9183:9181"
- # volumes:
- # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- # - ./data/clickhouse-3/:/var/lib/clickhouse/
- # - ./user_scripts:/var/lib/clickhouse/user_scripts/
-
- alertmanager:
- image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.7}
- container_name: signoz-alertmanager
- volumes:
- - ./data/alertmanager:/data
- depends_on:
- query-service:
- condition: service_healthy
- restart: on-failure
- command:
- - --queryService.url=http://query-service:8085
- - --storage.path=/data
-
- # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
-
- query-service:
- image: signoz/query-service:${DOCKER_TAG:-0.57.0}
- container_name: signoz-query-service
- command:
- [
- "-config=/root/config/prometheus.yml",
- "--use-logs-new-schema=true"
- ]
- # ports:
- # - "6060:6060" # pprof port
- # - "8080:8080" # query-service port
- volumes:
- - ./prometheus.yml:/root/config/prometheus.yml
- - ../dashboards:/root/config/dashboards
- - ./data/signoz/:/var/lib/signoz/
- environment:
- - ClickHouseUrl=tcp://clickhouse:9000
- - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/
- - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db
- - DASHBOARDS_PATH=/root/config/dashboards
- - STORAGE=clickhouse
- - GODEBUG=netdns=go
- - TELEMETRY_ENABLED=true
- - DEPLOYMENT_TYPE=docker-standalone-amd
- restart: on-failure
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--spider",
- "-q",
- "localhost:8080/api/v1/health"
- ]
- interval: 30s
- timeout: 5s
- retries: 3
- <<: *db-depend
-
- frontend:
- image: signoz/frontend:${DOCKER_TAG:-0.57.0}
- container_name: signoz-frontend
- restart: on-failure
- depends_on:
- - alertmanager
- - query-service
- ports:
- - "3301:3301"
- volumes:
- - ./nginx-config.conf:/etc/nginx/conf.d/default.conf
-
- otel-collector-migrator-sync:
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.111.5}
- container_name: otel-migrator-sync
- command:
- - "sync"
- - "--dsn=tcp://clickhouse:9000"
- - "--up="
- depends_on:
- clickhouse:
- condition: service_healthy
- # clickhouse-2:
- # condition: service_healthy
- # clickhouse-3:
- # condition: service_healthy
-
- otel-collector-migrator-async:
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.111.5}
- container_name: otel-migrator-async
- command:
- - "async"
- - "--dsn=tcp://clickhouse:9000"
- - "--up="
- depends_on:
- clickhouse:
- condition: service_healthy
- otel-collector-migrator-sync:
- condition: service_completed_successfully
- # clickhouse-2:
- # condition: service_healthy
- # clickhouse-3:
- # condition: service_healthy
-
- otel-collector:
- image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.111.5}
- container_name: signoz-otel-collector
- command:
- [
- "--config=/etc/otel-collector-config.yaml",
- "--manager-config=/etc/manager-config.yaml",
- "--copy-path=/var/tmp/collector-config.yaml",
- "--feature-gates=-pkg.translator.prometheus.NormalizeName"
- ]
- user: root # required for reading docker container logs
- volumes:
- - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
- - ./otel-collector-opamp-config.yaml:/etc/manager-config.yaml
- - /var/lib/docker/containers:/var/lib/docker/containers:ro
- - /:/hostfs:ro
- environment:
- - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- - LOW_CARDINAL_EXCEPTION_GROUPING=false
- ports:
- # - "1777:1777" # pprof extension
- - "4317:4317" # OTLP gRPC receiver
- - "4318:4318" # OTLP HTTP receiver
- # - "8888:8888" # OtelCollector internal metrics
- # - "8889:8889" # signoz spanmetrics exposed by the agent
- # - "9411:9411" # Zipkin port
- # - "13133:13133" # health check extension
- # - "14250:14250" # Jaeger gRPC
- # - "14268:14268" # Jaeger thrift HTTP
- # - "55678:55678" # OpenCensus receiver
- # - "55679:55679" # zPages extension
- restart: on-failure
- depends_on:
- clickhouse:
- condition: service_healthy
- otel-collector-migrator-sync:
- condition: service_completed_successfully
- query-service:
- condition: service_healthy
-
- logspout:
- image: "gliderlabs/logspout:v3.2.14"
- container_name: signoz-logspout
- volumes:
- - /etc/hostname:/etc/host_hostname:ro
- - /var/run/docker.sock:/var/run/docker.sock
- command: syslog+tcp://otel-collector:2255
- depends_on:
- - otel-collector
- restart: on-failure
diff --git a/demos/shared/signoz/docker-compose.testing.yaml b/demos/shared/signoz/docker-compose.testing.yaml
deleted file mode 100644
index d8c0db25..00000000
--- a/demos/shared/signoz/docker-compose.testing.yaml
+++ /dev/null
@@ -1,284 +0,0 @@
-version: "2.4"
-
-include:
- - test-app-docker-compose.yaml
-
-x-clickhouse-defaults: &clickhouse-defaults
- restart: on-failure
- # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab
- image: clickhouse/clickhouse-server:24.1.2-alpine
- tty: true
- depends_on:
- - zookeeper-1
- # - zookeeper-2
- # - zookeeper-3
- logging:
- options:
- max-size: 50m
- max-file: "3"
- healthcheck:
- # "clickhouse", "client", "-u ${CLICKHOUSE_USER}", "--password ${CLICKHOUSE_PASSWORD}", "-q 'SELECT 1'"
- test:
- [
- "CMD",
- "wget",
- "--spider",
- "-q",
- "0.0.0.0:8123/ping"
- ]
- interval: 30s
- timeout: 5s
- retries: 3
- ulimits:
- nproc: 65535
- nofile:
- soft: 262144
- hard: 262144
-
-x-db-depend: &db-depend
- depends_on:
- clickhouse:
- condition: service_healthy
- otel-collector-migrator:
- condition: service_completed_successfully
- # clickhouse-2:
- # condition: service_healthy
- # clickhouse-3:
- # condition: service_healthy
-
-services:
-
- zookeeper-1:
- image: bitnami/zookeeper:3.7.1
- container_name: signoz-zookeeper-1
- hostname: zookeeper-1
- user: root
- ports:
- - "2181:2181"
- - "2888:2888"
- - "3888:3888"
- volumes:
- - ./data/zookeeper-1:/bitnami/zookeeper
- environment:
- - ZOO_SERVER_ID=1
- # - ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper-2:2888:3888,zookeeper-3:2888:3888
- - ALLOW_ANONYMOUS_LOGIN=yes
- - ZOO_AUTOPURGE_INTERVAL=1
-
- # zookeeper-2:
- # image: bitnami/zookeeper:3.7.0
- # container_name: signoz-zookeeper-2
- # hostname: zookeeper-2
- # user: root
- # ports:
- # - "2182:2181"
- # - "2889:2888"
- # - "3889:3888"
- # volumes:
- # - ./data/zookeeper-2:/bitnami/zookeeper
- # environment:
- # - ZOO_SERVER_ID=2
- # - ZOO_SERVERS=zookeeper-1:2888:3888,0.0.0.0:2888:3888,zookeeper-3:2888:3888
- # - ALLOW_ANONYMOUS_LOGIN=yes
- # - ZOO_AUTOPURGE_INTERVAL=1
-
- # zookeeper-3:
- # image: bitnami/zookeeper:3.7.0
- # container_name: signoz-zookeeper-3
- # hostname: zookeeper-3
- # user: root
- # ports:
- # - "2183:2181"
- # - "2890:2888"
- # - "3890:3888"
- # volumes:
- # - ./data/zookeeper-3:/bitnami/zookeeper
- # environment:
- # - ZOO_SERVER_ID=3
- # - ZOO_SERVERS=zookeeper-1:2888:3888,zookeeper-2:2888:3888,0.0.0.0:2888:3888
- # - ALLOW_ANONYMOUS_LOGIN=yes
- # - ZOO_AUTOPURGE_INTERVAL=1
-
- clickhouse:
- <<: *clickhouse-defaults
- container_name: signoz-clickhouse
- hostname: clickhouse
- ports:
- - "9000:9000"
- - "8123:8123"
- - "9181:9181"
- volumes:
- - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- - ./data/clickhouse/:/var/lib/clickhouse/
- - ./user_scripts:/var/lib/clickhouse/user_scripts/
-
- # clickhouse-2:
- # <<: *clickhouse-defaults
- # container_name: signoz-clickhouse-2
- # hostname: clickhouse-2
- # ports:
- # - "9001:9000"
- # - "8124:8123"
- # - "9182:9181"
- # volumes:
- # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- # - ./data/clickhouse-2/:/var/lib/clickhouse/
- # - ./user_scripts:/var/lib/clickhouse/user_scripts/
-
-
- # clickhouse-3:
- # <<: *clickhouse-defaults
- # container_name: signoz-clickhouse-3
- # hostname: clickhouse-3
- # ports:
- # - "9002:9000"
- # - "8125:8123"
- # - "9183:9181"
- # volumes:
- # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml
- # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
- # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
- # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
- # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
- # - ./data/clickhouse-3/:/var/lib/clickhouse/
- # - ./user_scripts:/var/lib/clickhouse/user_scripts/
-
- alertmanager:
- image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.7}
- container_name: signoz-alertmanager
- volumes:
- - ./data/alertmanager:/data
- depends_on:
- query-service:
- condition: service_healthy
- restart: on-failure
- command:
- - --queryService.url=http://query-service:8085
- - --storage.path=/data
-
- # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md`
-
- query-service:
- image: signoz/query-service:${DOCKER_TAG:-0.57.0}
- container_name: signoz-query-service
- command:
- [
- "-config=/root/config/prometheus.yml",
- "-gateway-url=https://api.staging.signoz.cloud",
- "--use-logs-new-schema=true"
- ]
- # ports:
- # - "6060:6060" # pprof port
- # - "8080:8080" # query-service port
- volumes:
- - ./prometheus.yml:/root/config/prometheus.yml
- - ../dashboards:/root/config/dashboards
- - ./data/signoz/:/var/lib/signoz/
- environment:
- - ClickHouseUrl=tcp://clickhouse:9000
- - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/
- - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db
- - DASHBOARDS_PATH=/root/config/dashboards
- - STORAGE=clickhouse
- - GODEBUG=netdns=go
- - TELEMETRY_ENABLED=true
- - DEPLOYMENT_TYPE=docker-standalone-amd
- restart: on-failure
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--spider",
- "-q",
- "localhost:8080/api/v1/health"
- ]
- interval: 30s
- timeout: 5s
- retries: 3
- <<: *db-depend
-
- frontend:
- image: signoz/frontend:${DOCKER_TAG:-0.57.0}
- container_name: signoz-frontend
- restart: on-failure
- depends_on:
- - alertmanager
- - query-service
- ports:
- - "3301:3301"
- volumes:
- - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf
-
- otel-collector-migrator:
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.111.5}
- container_name: otel-migrator
- command:
- - "--dsn=tcp://clickhouse:9000"
- depends_on:
- clickhouse:
- condition: service_healthy
- # clickhouse-2:
- # condition: service_healthy
- # clickhouse-3:
- # condition: service_healthy
-
-
- otel-collector:
- image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.111.5}
- container_name: signoz-otel-collector
- command:
- [
- "--config=/etc/otel-collector-config.yaml",
- "--manager-config=/etc/manager-config.yaml",
- "--copy-path=/var/tmp/collector-config.yaml",
- "--feature-gates=-pkg.translator.prometheus.NormalizeName"
- ]
- user: root # required for reading docker container logs
- volumes:
- - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
- - ./otel-collector-opamp-config.yaml:/etc/manager-config.yaml
- - /var/lib/docker/containers:/var/lib/docker/containers:ro
- - /:/hostfs:ro
- environment:
- - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- - LOW_CARDINAL_EXCEPTION_GROUPING=false
- ports:
- # - "1777:1777" # pprof extension
- - "4317:4317" # OTLP gRPC receiver
- - "4318:4318" # OTLP HTTP receiver
- # - "8888:8888" # OtelCollector internal metrics
- # - "8889:8889" # signoz spanmetrics exposed by the agent
- # - "9411:9411" # Zipkin port
- # - "13133:13133" # health check extension
- # - "14250:14250" # Jaeger gRPC
- # - "14268:14268" # Jaeger thrift HTTP
- # - "55678:55678" # OpenCensus receiver
- # - "55679:55679" # zPages extension
- restart: on-failure
- depends_on:
- clickhouse:
- condition: service_healthy
- otel-collector-migrator:
- condition: service_completed_successfully
- query-service:
- condition: service_healthy
-
- logspout:
- image: "gliderlabs/logspout:v3.2.14"
- container_name: signoz-logspout
- volumes:
- - /etc/hostname:/etc/host_hostname:ro
- - /var/run/docker.sock:/var/run/docker.sock
- command: syslog+tcp://otel-collector:2255
- depends_on:
- - otel-collector
- restart: on-failure
diff --git a/demos/shared/signoz/docker-compose.yaml b/demos/shared/signoz/docker-compose.yaml
deleted file mode 100644
index 251ca253..00000000
--- a/demos/shared/signoz/docker-compose.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-include:
- - test-app-docker-compose.yaml
- - docker-compose-minimal.yaml
diff --git a/demos/shared/signoz/keeper_config.xml b/demos/shared/signoz/keeper_config.xml
deleted file mode 100644
index f9a96dca..00000000
--- a/demos/shared/signoz/keeper_config.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
- information
- /var/log/clickhouse-keeper/clickhouse-keeper.log
- /var/log/clickhouse-keeper/clickhouse-keeper.err.log
-
- 1000M
- 10
-
-
-
- 0.0.0.0
- 4096
-
-
- 9181
-
-
- 1
-
- /var/lib/clickhouse/coordination/logs
- /var/lib/clickhouse/coordination/snapshots
-
-
- 10000
- 10000
- 100000
- information
- false
-
-
-
-
- true
-
-
- 1
-
-
- clickhouses-keeper-1
- 9234
-
-
-
-
-
-
-
diff --git a/demos/shared/signoz/nginx-config.conf b/demos/shared/signoz/nginx-config.conf
deleted file mode 100644
index 442a2899..00000000
--- a/demos/shared/signoz/nginx-config.conf
+++ /dev/null
@@ -1,64 +0,0 @@
-map $http_upgrade $connection_upgrade {
- default upgrade;
- '' close;
-}
-
-server {
- listen 3301;
- server_name _;
-
- gzip on;
- gzip_static on;
- gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
- gzip_proxied any;
- gzip_vary on;
- gzip_comp_level 6;
- gzip_buffers 16 8k;
- gzip_http_version 1.1;
-
- # to handle uri issue 414 from nginx
- client_max_body_size 24M;
- large_client_header_buffers 8 128k;
-
- location / {
- if ( $uri = '/index.html' ) {
- add_header Cache-Control no-store always;
- }
- root /usr/share/nginx/html;
- index index.html index.htm;
- try_files $uri $uri/ /index.html;
- }
-
- location ~ ^/api/(v1|v3)/logs/(tail|livetail){
- proxy_pass http://query-service:8080;
- proxy_http_version 1.1;
-
- # connection will be closed if no data is read for 600s between successive read operations
- proxy_read_timeout 600s;
-
- # dont buffer the data send it directly to client.
- proxy_buffering off;
- proxy_cache off;
- }
-
- location /api {
- proxy_pass http://query-service:8080/api;
- # connection will be closed if no data is read for 600s between successive read operations
- proxy_read_timeout 600s;
- }
-
- location /ws {
- proxy_pass http://query-service:8080/ws;
- proxy_http_version 1.1;
- proxy_set_header Upgrade "websocket";
- proxy_set_header Connection "upgrade";
- proxy_read_timeout 86400;
- }
-
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /usr/share/nginx/html;
- }
-}
diff --git a/demos/shared/signoz/otel-collector-config.yaml b/demos/shared/signoz/otel-collector-config.yaml
deleted file mode 100644
index d7b491b7..00000000
--- a/demos/shared/signoz/otel-collector-config.yaml
+++ /dev/null
@@ -1,188 +0,0 @@
-receivers:
- tcplog/docker:
- listen_address: "0.0.0.0:2255"
- operators:
- - type: regex_parser
- regex: '^<([0-9]+)>[0-9]+ (?P[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?) (?P\S+) (?P\S+) [0-9]+ - -( (?P.*))?'
- timestamp:
- parse_from: attributes.timestamp
- layout: '%Y-%m-%dT%H:%M:%S.%LZ'
- - type: move
- from: attributes["body"]
- to: body
- - type: remove
- field: attributes.timestamp
- # please remove names from below if you want to collect logs from them
- - type: filter
- id: signoz_logs_filter
- expr: 'attributes.container_name matches "^signoz-(logspout|frontend|alertmanager|query-service|otel-collector|clickhouse|zookeeper)"'
- opencensus:
- endpoint: 0.0.0.0:55678
- otlp:
- protocols:
- grpc:
- endpoint: 0.0.0.0:4317
- http:
- endpoint: 0.0.0.0:4318
- jaeger:
- protocols:
- grpc:
- endpoint: 0.0.0.0:14250
- thrift_http:
- endpoint: 0.0.0.0:14268
- # thrift_compact:
- # endpoint: 0.0.0.0:6831
- # thrift_binary:
- # endpoint: 0.0.0.0:6832
- hostmetrics:
- collection_interval: 30s
- root_path: /hostfs
- scrapers:
- cpu: {}
- load: {}
- memory: {}
- disk: {}
- filesystem: {}
- network: {}
- prometheus:
- config:
- global:
- scrape_interval: 60s
- scrape_configs:
- # otel-collector internal metrics
- - job_name: otel-collector
- static_configs:
- - targets:
- - localhost:8888
- labels:
- job_name: otel-collector
-
-
-processors:
- batch:
- send_batch_size: 10000
- send_batch_max_size: 11000
- timeout: 10s
- signozspanmetrics/cumulative:
- metrics_exporter: clickhousemetricswrite
- metrics_flush_interval: 60s
- latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
- dimensions_cache_size: 100000
- dimensions:
- - name: service.namespace
- default: default
- - name: deployment.environment
- default: default
- # This is added to ensure the uniqueness of the timeseries
- # Otherwise, identical timeseries produced by multiple replicas of
- # collectors result in incorrect APM metrics
- - name: signoz.collector.id
- - name: service.version
- - name: browser.platform
- - name: browser.mobile
- - name: k8s.cluster.name
- - name: k8s.node.name
- - name: k8s.namespace.name
- - name: host.name
- - name: host.type
- - name: container.name
- # memory_limiter:
- # # 80% of maximum memory up to 2G
- # limit_mib: 1500
- # # 25% of limit up to 2G
- # spike_limit_mib: 512
- # check_interval: 5s
- #
- # # 50% of the maximum memory
- # limit_percentage: 50
- # # 20% of max memory usage spike expected
- # spike_limit_percentage: 20
- # queued_retry:
- # num_workers: 4
- # queue_size: 100
- # retry_on_failure: true
- resourcedetection:
- # Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels.
- detectors: [env, system] # include ec2 for AWS, gcp for GCP and azure for Azure.
- timeout: 2s
- signozspanmetrics/delta:
- metrics_exporter: clickhousemetricswrite
- metrics_flush_interval: 60s
- latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
- dimensions_cache_size: 100000
- aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
- enable_exp_histogram: true
- dimensions:
- - name: service.namespace
- default: default
- - name: deployment.environment
- default: default
- # This is added to ensure the uniqueness of the timeseries
- # Otherwise, identical timeseries produced by multiple replicas of
- # collectors result in incorrect APM metrics
- - name: signoz.collector.id
- - name: service.version
- - name: browser.platform
- - name: browser.mobile
- - name: k8s.cluster.name
- - name: k8s.node.name
- - name: k8s.namespace.name
- - name: host.name
- - name: host.type
- - name: container.name
-
-extensions:
- health_check:
- endpoint: 0.0.0.0:13133
- zpages:
- endpoint: 0.0.0.0:55679
- pprof:
- endpoint: 0.0.0.0:1777
-
-exporters:
- clickhousetraces:
- datasource: tcp://clickhouse:9000/signoz_traces
- low_cardinal_exception_grouping: ${env:LOW_CARDINAL_EXCEPTION_GROUPING}
- clickhousemetricswrite:
- endpoint: tcp://clickhouse:9000/signoz_metrics
- resource_to_telemetry_conversion:
- enabled: true
- clickhousemetricswrite/prometheus:
- endpoint: tcp://clickhouse:9000/signoz_metrics
- clickhouselogsexporter:
- dsn: tcp://clickhouse:9000/signoz_logs
- timeout: 10s
- use_new_schema: true
- # logging: {}
-
-service:
- telemetry:
- logs:
- encoding: json
- metrics:
- address: 0.0.0.0:8888
- extensions:
- - health_check
- - zpages
- - pprof
- pipelines:
- traces:
- receivers: [jaeger, otlp]
- processors: [signozspanmetrics/cumulative, signozspanmetrics/delta, batch]
- exporters: [clickhousetraces]
- metrics:
- receivers: [otlp]
- processors: [batch]
- exporters: [clickhousemetricswrite]
- metrics/generic:
- receivers: [hostmetrics]
- processors: [resourcedetection, batch]
- exporters: [clickhousemetricswrite]
- metrics/prometheus:
- receivers: [prometheus]
- processors: [batch]
- exporters: [clickhousemetricswrite/prometheus]
- logs:
- receivers: [otlp, tcplog/docker]
- processors: [batch]
- exporters: [clickhouselogsexporter]
diff --git a/demos/shared/signoz/otel-collector-opamp-config.yaml b/demos/shared/signoz/otel-collector-opamp-config.yaml
deleted file mode 100644
index e408b55e..00000000
--- a/demos/shared/signoz/otel-collector-opamp-config.yaml
+++ /dev/null
@@ -1 +0,0 @@
-server_endpoint: ws://query-service:4320/v1/opamp
diff --git a/demos/shared/signoz/prometheus.yml b/demos/shared/signoz/prometheus.yml
deleted file mode 100644
index d7c52893..00000000
--- a/demos/shared/signoz/prometheus.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-# my global config
-global:
- scrape_interval: 5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
- evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
- # scrape_timeout is set to the global default (10s).
-
-# Alertmanager configuration
-alerting:
- alertmanagers:
- - static_configs:
- - targets:
- - alertmanager:9093
-
-# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
-rule_files:
- # - "first_rules.yml"
- # - "second_rules.yml"
- - 'alerts.yml'
-
-# A scrape configuration containing exactly one endpoint to scrape:
-# Here it's Prometheus itself.
-scrape_configs: []
-
-remote_read:
- - url: tcp://clickhouse:9000/signoz_metrics
diff --git a/demos/shared/signoz/test-app-docker-compose.yaml b/demos/shared/signoz/test-app-docker-compose.yaml
deleted file mode 100644
index c043d75d..00000000
--- a/demos/shared/signoz/test-app-docker-compose.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-services:
- hotrod:
- image: jaegertracing/example-hotrod:1.30
- container_name: hotrod
- logging:
- options:
- max-size: 50m
- max-file: "3"
- command: [ "all" ]
- environment:
- - JAEGER_ENDPOINT=http://otel-collector:14268/api/traces
-
- load-hotrod:
- image: "signoz/locust:1.2.3"
- container_name: load-hotrod
- hostname: load-hotrod
- environment:
- ATTACKED_HOST: http://hotrod:8080
- LOCUST_MODE: standalone
- NO_PROXY: standalone
- TASK_DELAY_FROM: 5
- TASK_DELAY_TO: 30
- QUIET_MODE: "${QUIET_MODE:-false}"
- LOCUST_OPTS: "--headless -u 10 -r 1"
- volumes:
- - ../common/locust-scripts:/locust
diff --git a/demos/shared/signoz/user_scripts/histogramQuantile b/demos/shared/signoz/user_scripts/histogramQuantile
deleted file mode 100755
index 3b77a7b2..00000000
Binary files a/demos/shared/signoz/user_scripts/histogramQuantile and /dev/null differ
diff --git a/demos/shared/signoz/user_scripts/histogramQuantile.go b/demos/shared/signoz/user_scripts/histogramQuantile.go
deleted file mode 100644
index 9540a774..00000000
--- a/demos/shared/signoz/user_scripts/histogramQuantile.go
+++ /dev/null
@@ -1,237 +0,0 @@
-package main
-
-import (
- "bufio"
- "fmt"
- "math"
- "os"
- "sort"
- "strconv"
- "strings"
-)
-
-// NOTE: executable must be built with target OS and architecture set to linux/amd64
-// env GOOS=linux GOARCH=amd64 go build -o histogramQuantile histogramQuantile.go
-
-// The following code is adapted from the following source:
-// https://github.com/prometheus/prometheus/blob/main/promql/quantile.go
-
-type bucket struct {
- upperBound float64
- count float64
-}
-
-// buckets implements sort.Interface.
-type buckets []bucket
-
-func (b buckets) Len() int { return len(b) }
-func (b buckets) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
-func (b buckets) Less(i, j int) bool { return b[i].upperBound < b[j].upperBound }
-
-// bucketQuantile calculates the quantile 'q' based on the given buckets. The
-// buckets will be sorted by upperBound by this function (i.e. no sorting
-// needed before calling this function). The quantile value is interpolated
-// assuming a linear distribution within a bucket. However, if the quantile
-// falls into the highest bucket, the upper bound of the 2nd highest bucket is
-// returned. A natural lower bound of 0 is assumed if the upper bound of the
-// lowest bucket is greater 0. In that case, interpolation in the lowest bucket
-// happens linearly between 0 and the upper bound of the lowest bucket.
-// However, if the lowest bucket has an upper bound less or equal 0, this upper
-// bound is returned if the quantile falls into the lowest bucket.
-//
-// There are a number of special cases (once we have a way to report errors
-// happening during evaluations of AST functions, we should report those
-// explicitly):
-//
-// If 'buckets' has 0 observations, NaN is returned.
-//
-// If 'buckets' has fewer than 2 elements, NaN is returned.
-//
-// If the highest bucket is not +Inf, NaN is returned.
-//
-// If q==NaN, NaN is returned.
-//
-// If q<0, -Inf is returned.
-//
-// If q>1, +Inf is returned.
-func bucketQuantile(q float64, buckets buckets) float64 {
- if math.IsNaN(q) {
- return math.NaN()
- }
- if q < 0 {
- return math.Inf(-1)
- }
- if q > 1 {
- return math.Inf(+1)
- }
- sort.Sort(buckets)
- if !math.IsInf(buckets[len(buckets)-1].upperBound, +1) {
- return math.NaN()
- }
-
- buckets = coalesceBuckets(buckets)
- ensureMonotonic(buckets)
-
- if len(buckets) < 2 {
- return math.NaN()
- }
- observations := buckets[len(buckets)-1].count
- if observations == 0 {
- return math.NaN()
- }
- rank := q * observations
- b := sort.Search(len(buckets)-1, func(i int) bool { return buckets[i].count >= rank })
-
- if b == len(buckets)-1 {
- return buckets[len(buckets)-2].upperBound
- }
- if b == 0 && buckets[0].upperBound <= 0 {
- return buckets[0].upperBound
- }
- var (
- bucketStart float64
- bucketEnd = buckets[b].upperBound
- count = buckets[b].count
- )
- if b > 0 {
- bucketStart = buckets[b-1].upperBound
- count -= buckets[b-1].count
- rank -= buckets[b-1].count
- }
- return bucketStart + (bucketEnd-bucketStart)*(rank/count)
-}
-
-// coalesceBuckets merges buckets with the same upper bound.
-//
-// The input buckets must be sorted.
-func coalesceBuckets(buckets buckets) buckets {
- last := buckets[0]
- i := 0
- for _, b := range buckets[1:] {
- if b.upperBound == last.upperBound {
- last.count += b.count
- } else {
- buckets[i] = last
- last = b
- i++
- }
- }
- buckets[i] = last
- return buckets[:i+1]
-}
-
-// The assumption that bucket counts increase monotonically with increasing
-// upperBound may be violated during:
-//
-// * Recording rule evaluation of histogram_quantile, especially when rate()
-// has been applied to the underlying bucket timeseries.
-// * Evaluation of histogram_quantile computed over federated bucket
-// timeseries, especially when rate() has been applied.
-//
-// This is because scraped data is not made available to rule evaluation or
-// federation atomically, so some buckets are computed with data from the
-// most recent scrapes, but the other buckets are missing data from the most
-// recent scrape.
-//
-// Monotonicity is usually guaranteed because if a bucket with upper bound
-// u1 has count c1, then any bucket with a higher upper bound u > u1 must
-// have counted all c1 observations and perhaps more, so that c >= c1.
-//
-// Randomly interspersed partial sampling breaks that guarantee, and rate()
-// exacerbates it. Specifically, suppose bucket le=1000 has a count of 10 from
-// 4 samples but the bucket with le=2000 has a count of 7 from 3 samples. The
-// monotonicity is broken. It is exacerbated by rate() because under normal
-// operation, cumulative counting of buckets will cause the bucket counts to
-// diverge such that small differences from missing samples are not a problem.
-// rate() removes this divergence.)
-//
-// bucketQuantile depends on that monotonicity to do a binary search for the
-// bucket with the φ-quantile count, so breaking the monotonicity
-// guarantee causes bucketQuantile() to return undefined (nonsense) results.
-//
-// As a somewhat hacky solution until ingestion is atomic per scrape, we
-// calculate the "envelope" of the histogram buckets, essentially removing
-// any decreases in the count between successive buckets.
-
-func ensureMonotonic(buckets buckets) {
- max := buckets[0].count
- for i := 1; i < len(buckets); i++ {
- switch {
- case buckets[i].count > max:
- max = buckets[i].count
- case buckets[i].count < max:
- buckets[i].count = max
- }
- }
-}
-
-// End of copied code.
-
-func readLines() []string {
- r := bufio.NewReader(os.Stdin)
- bytes := []byte{}
- lines := []string{}
- for {
- line, isPrefix, err := r.ReadLine()
- if err != nil {
- break
- }
- bytes = append(bytes, line...)
- if !isPrefix {
- str := strings.TrimSpace(string(bytes))
- if len(str) > 0 {
- lines = append(lines, str)
- bytes = []byte{}
- }
- }
- }
- if len(bytes) > 0 {
- lines = append(lines, string(bytes))
- }
- return lines
-}
-
-func main() {
- lines := readLines()
- for _, text := range lines {
- // Example input
- // "[1, 2, 4, 8, 16]", "[1, 5, 8, 10, 14]", 0.9"
- // bounds - counts - quantile
- parts := strings.Split(text, "\",")
-
- var bucketNumbers []float64
- // Strip the ends with square brackets
- text = parts[0][2 : len(parts[0])-1]
- // Parse the bucket bounds
- for _, num := range strings.Split(text, ",") {
- num = strings.TrimSpace(num)
- number, err := strconv.ParseFloat(num, 64)
- if err == nil {
- bucketNumbers = append(bucketNumbers, number)
- }
- }
-
- var bucketCounts []float64
- // Strip the ends with square brackets
- text = parts[1][2 : len(parts[1])-1]
- // Parse the bucket counts
- for _, num := range strings.Split(text, ",") {
- num = strings.TrimSpace(num)
- number, err := strconv.ParseFloat(num, 64)
- if err == nil {
- bucketCounts = append(bucketCounts, number)
- }
- }
-
- // Parse the quantile
- q, err := strconv.ParseFloat(parts[2], 64)
- var b buckets
-
- if err == nil {
- for i := 0; i < len(bucketNumbers); i++ {
- b = append(b, bucket{upperBound: bucketNumbers[i], count: bucketCounts[i]})
- }
- }
- fmt.Println(bucketQuantile(q, b))
- }
-}
diff --git a/demos/use_cases/ollama/docker-compose_honeycomb.yaml b/demos/use_cases/ollama/docker-compose_honeycomb.yaml
deleted file mode 100644
index 9b44c0c2..00000000
--- a/demos/use_cases/ollama/docker-compose_honeycomb.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-services:
- chatbot_ui:
- build:
- context: ../../shared/chatbot_ui
- ports:
- - "18080:8080"
- environment:
- # this is only because we are running the sample app in the same docker container environemtn as archgw
- - CHAT_COMPLETION_ENDPOINT=http://host.docker.internal:10000/v1
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config.yaml:/app/plano_config.yaml
-
- otel-collector:
- build:
- context: ../../shared/honeycomb/
- ports:
- - "4317:4317"
- - "4318:4318"
- volumes:
- - ../../shared/honeycomb/otel-collector-config.yaml:/etc/otel-collector-config.yaml
- env_file:
- - .env
- environment:
- - HONEYCOMB_API_KEY=${HONEYCOMB_API_KEY:?error}
diff --git a/demos/use_cases/spotify_bearer_auth/run_demo.sh b/demos/use_cases/spotify_bearer_auth/run_demo.sh
deleted file mode 100644
index 6623dee5..00000000
--- a/demos/use_cases/spotify_bearer_auth/run_demo.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-set -e
-
-# Function to start the demo
-start_demo() {
- # Step 1: Check if .env file exists
- if [ -f ".env" ]; then
- echo ".env file already exists. Skipping creation."
- else
- # Step 2: Create `.env` file and set OpenAI key
- if [ -z "$OPENAI_API_KEY" ]; then
- echo "Error: OPENAI_API_KEY environment variable is not set for the demo."
- exit 1
- fi
-
- echo "Creating .env file..."
- echo "OPENAI_API_KEY=$OPENAI_API_KEY" > .env
- echo ".env file created with OPENAI_API_KEY."
- fi
-
- # Step 3: Start Plano
- echo "Starting Plano with config.yaml..."
- planoai up config.yaml
-
- # Step 4: Start developer services
- echo "Starting Network Agent using Docker Compose..."
- docker compose up -d # Run in detached mode
-}
-
-# Function to stop the demo
-stop_demo() {
- # Step 1: Stop Docker Compose services
- echo "Stopping Network Agent using Docker Compose..."
- docker compose down
-
- # Step 2: Stop Plano
- echo "Stopping Plano..."
- planoai down
-}
-
-# Main script logic
-if [ "$1" == "down" ]; then
- stop_demo
-else
- # Default action is to bring the demo up
- start_demo
-fi