Merge branch 'master' into jmercer/complete-plugin-sync-fix

jmercer/complete-plugin-sync-fix
Jameelah Mercer 2025-11-18 16:57:38 -08:00 committed by GitHub
commit ffef19f60b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
44 changed files with 2714 additions and 1539 deletions

View File

@ -11,10 +11,11 @@ applyTo: "layouts/**/*.html"
When creating or modifying Hugo layouts and shortcodes:
1. Use Hugo template syntax and functions
2. Follow existing patterns in `/layouts/shortcodes/`
3. Test in [content/example.md](../../content/example.md)
4. Document new shortcodes in [DOCS-SHORTCODES.md](../../DOCS-SHORTCODES.md)
1. Use test-driven development using `/cypress/`
2. Use Hugo template syntax and functions
3. Follow existing patterns in `/layouts/shortcodes/`
4. Test in [content/example.md](../../content/example.md)
5. Document new shortcodes in [DOCS-SHORTCODES.md](../../DOCS-SHORTCODES.md)
## Shortcode Pattern
@ -30,9 +31,32 @@ When creating or modifying Hugo layouts and shortcodes:
## Testing
Add usage examples to `content/example.md` to verify:
**IMPORTANT:** Use test-driven development with Cypress.
Add shortcode usage examples to `content/example.md` to verify:
- Rendering in browser
- Hugo build succeeds
- No console errors
- JavaScript functionality works as expected (check browser console for errors)
- Interactive elements behave correctly (click links, buttons, etc.)
### TDD Workflow
1. Add Cypress tests (high-level to start).
2. Run tests and make sure they fail.
3. Implement code changes
4. Run tests and make sure they pass.
5. Add and refine tests.
6. Repeat.
### Manual Testing Workflow
1. Make changes to shortcode/layout files
2. Wait for Hugo to rebuild (check terminal output)
3. Get the server URL from the log
4. Open browser DevTools console (F12)
5. Test the functionality and check for JavaScript errors
6. Verify the feature works as intended before marking complete
See [DOCS-SHORTCODES.md](../../DOCS-SHORTCODES.md) for complete shortcode documentation.

View File

@ -33,6 +33,9 @@ call_lefthook()
then
"$dir/node_modules/lefthook/bin/index.js" "$@"
elif go tool lefthook -h >/dev/null 2>&1
then
go tool lefthook "$@"
elif bundle exec lefthook -h >/dev/null 2>&1
then
bundle exec lefthook "$@"
@ -42,12 +45,21 @@ call_lefthook()
elif pnpm lefthook -h >/dev/null 2>&1
then
pnpm lefthook "$@"
elif swift package plugin lefthook >/dev/null 2>&1
elif swift package lefthook >/dev/null 2>&1
then
swift package --disable-sandbox plugin lefthook "$@"
swift package --build-path .build/lefthook --disable-sandbox lefthook "$@"
elif command -v mint >/dev/null 2>&1
then
mint run csjones/lefthook-plugin "$@"
elif uv run lefthook -h >/dev/null 2>&1
then
uv run lefthook "$@"
elif mise exec -- lefthook -h >/dev/null 2>&1
then
mise exec -- lefthook "$@"
elif devbox run lefthook -h >/dev/null 2>&1
then
devbox run lefthook "$@"
else
echo "Can't find lefthook in PATH"
fi

View File

@ -33,6 +33,9 @@ call_lefthook()
then
"$dir/node_modules/lefthook/bin/index.js" "$@"
elif go tool lefthook -h >/dev/null 2>&1
then
go tool lefthook "$@"
elif bundle exec lefthook -h >/dev/null 2>&1
then
bundle exec lefthook "$@"
@ -42,12 +45,21 @@ call_lefthook()
elif pnpm lefthook -h >/dev/null 2>&1
then
pnpm lefthook "$@"
elif swift package plugin lefthook >/dev/null 2>&1
elif swift package lefthook >/dev/null 2>&1
then
swift package --disable-sandbox plugin lefthook "$@"
swift package --build-path .build/lefthook --disable-sandbox lefthook "$@"
elif command -v mint >/dev/null 2>&1
then
mint run csjones/lefthook-plugin "$@"
elif uv run lefthook -h >/dev/null 2>&1
then
uv run lefthook "$@"
elif mise exec -- lefthook -h >/dev/null 2>&1
then
mise exec -- lefthook "$@"
elif devbox run lefthook -h >/dev/null 2>&1
then
devbox run lefthook "$@"
else
echo "Can't find lefthook in PATH"
fi

View File

@ -33,6 +33,9 @@ call_lefthook()
then
"$dir/node_modules/lefthook/bin/index.js" "$@"
elif go tool lefthook -h >/dev/null 2>&1
then
go tool lefthook "$@"
elif bundle exec lefthook -h >/dev/null 2>&1
then
bundle exec lefthook "$@"
@ -42,12 +45,21 @@ call_lefthook()
elif pnpm lefthook -h >/dev/null 2>&1
then
pnpm lefthook "$@"
elif swift package plugin lefthook >/dev/null 2>&1
elif swift package lefthook >/dev/null 2>&1
then
swift package --disable-sandbox plugin lefthook "$@"
swift package --build-path .build/lefthook --disable-sandbox lefthook "$@"
elif command -v mint >/dev/null 2>&1
then
mint run csjones/lefthook-plugin "$@"
elif uv run lefthook -h >/dev/null 2>&1
then
uv run lefthook "$@"
elif mise exec -- lefthook -h >/dev/null 2>&1
then
mise exec -- lefthook "$@"
elif devbox run lefthook -h >/dev/null 2>&1
then
devbox run lefthook "$@"
else
echo "Can't find lefthook in PATH"
fi

View File

@ -1,19 +1,117 @@
import AskAI from './ask-ai.js';
function showTrigger(element) {
// Remove the inline display: none style
element.removeAttribute('style');
/**
* Global state for Ask AI initialization
*/
const state = {
kapaInitialized: false,
linksListenerInitialized: false,
};
/**
* Initialize the Kapa widget
*/
function initializeKapa() {
if (!state.kapaInitialized) {
AskAI();
state.kapaInitialized = true;
// Store in global namespace for debugging
window.influxdatadocs = window.influxdatadocs || {};
window.influxdatadocs.kapaInitialized = true;
}
}
/**
* Show the trigger button by removing inline display: none style
* @param {HTMLElement} element - The trigger button element
*/
function showTrigger(element) {
if (element) {
element.removeAttribute('style');
}
}
/**
* Initialize Ask AI trigger button component
* @param {Object} options - Component options
* @param {HTMLElement} options.component - The trigger button element
*/
export default function AskAITrigger({ component }) {
const kapaContainer = document.querySelector('#kapa-widget-container');
if (!component && !kapaContainer) {
return;
}
if (!kapaContainer) {
// Initialize the chat widget
AskAI({ onChatLoad: () => showTrigger(component) });
state.kapaInitialized = true;
window.influxdatadocs = window.influxdatadocs || {};
window.influxdatadocs.kapaInitialized = true;
} else {
showTrigger(component);
}
}
}
/**
* Handle ask-ai-link clicks globally
* This ensures ask-ai-link shortcodes work even without the trigger button
*/
function handleAskAILinks() {
if (state.linksListenerInitialized) {
return;
}
state.linksListenerInitialized = true;
// Store in global namespace for debugging
window.influxdatadocs = window.influxdatadocs || {};
window.influxdatadocs.askAILinksInitialized = true;
// Listen for clicks on ask-ai-link elements
document.addEventListener(
'click',
(event) => {
const link = event.target.closest('.ask-ai-open');
if (!link) return;
const query = link.getAttribute('data-query');
// Initialize Kapa if not already done
if (!state.kapaInitialized) {
initializeKapa();
// Wait for Kapa to be ready, then open with query
if (query && window.Kapa?.open) {
// Give Kapa a moment to initialize
setTimeout(() => {
if (window.Kapa?.open) {
window.Kapa.open({
mode: 'ai',
query: query,
});
}
}, 100);
}
} else {
// Kapa is already initialized - open with query if provided
if (query && window.Kapa?.open) {
window.Kapa.open({
mode: 'ai',
query: query,
});
}
}
},
{ passive: true }
);
}
// Initialize ask-ai-link handling when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', handleAskAILinks);
} else {
handleAskAILinks();
}

View File

@ -1,108 +0,0 @@
import { productData } from './page-context.js';
function setUser(userid, email) {
const NAMESPACE = 'kapaSettings';
// Set the user ID and email in the global settings namespace.
// The chat widget will use this on subsequent chats to personalize the user's experience.
window[NAMESPACE] = {
user: {
uniqueClientId: userid,
email: email,
},
};
}
// Initialize the chat widget
function initializeChat({ onChatLoad, chatAttributes }) {
/* See https://docs.kapa.ai/integrations/website-widget/configuration for
* available configuration options.
* All values are strings.
*/
// If you make changes to data attributes here, you also need to
// port the changes to the api-docs/template.hbs API reference template.
const requiredAttributes = {
websiteId: 'a02bca75-1dd3-411e-95c0-79ee1139be4d',
projectName: 'InfluxDB',
projectColor: '#020a47',
projectLogo: '/img/influx-logo-cubo-white.png',
};
const optionalAttributes = {
modalDisclaimer:
'This AI can access [documentation for InfluxDB, clients, and related tools](https://docs.influxdata.com). Information you submit is used in accordance with our [Privacy Policy](https://www.influxdata.com/legal/privacy-policy/).',
modalExampleQuestions:
'Use Python to write data to InfluxDB 3,How do I query using SQL?,How do I use MQTT with Telegraf?',
buttonHide: 'true',
exampleQuestionButtonWidth: 'auto',
modalOpenOnCommandK: 'true',
modalExampleQuestionsColSpan: '8',
modalFullScreenOnMobile: 'true',
modalHeaderPadding: '.5rem',
modalInnerPositionRight: '0',
modalInnerPositionLeft: '',
modalLockScroll: 'false',
modalOverrideOpenClassAskAi: 'ask-ai-open',
modalSize: '640px',
modalWithOverlay: 'false',
modalYOffset: '10vh',
userAnalyticsFingerprintEnabled: 'true',
fontFamily: 'Proxima Nova, sans-serif',
modalHeaderBgColor: 'linear-gradient(90deg, #d30971 0%, #9b2aff 100%)',
modalHeaderBorderBottom: 'none',
modalTitleColor: '#fff',
modalTitleFontSize: '1.25rem',
};
const scriptUrl = 'https://widget.kapa.ai/kapa-widget.bundle.js';
const script = document.createElement('script');
script.async = true;
script.src = scriptUrl;
script.onload = function () {
onChatLoad();
window.influxdatadocs.AskAI = AskAI;
};
script.onerror = function () {
console.error('Error loading AI chat widget script');
};
const dataset = {
...requiredAttributes,
...optionalAttributes,
...chatAttributes,
};
Object.keys(dataset).forEach((key) => {
// Assign dataset attributes from the object
script.dataset[key] = dataset[key];
});
// Check for an existing script element to remove
const oldScript = document.querySelector(`script[src="${scriptUrl}"]`);
if (oldScript) {
oldScript.remove();
}
document.head.appendChild(script);
}
function getProductExampleQuestions() {
const questions = productData?.product?.ai_sample_questions;
return questions?.join(',') || '';
}
/**
* chatParams: specify custom (for example, page-specific) attribute values for the chat, pass the dataset key-values (collected in ...chatParams). See https://docs.kapa.ai/integrations/website-widget/configuration for available configuration options.
* onChatLoad: function to call when the chat widget has loaded
* userid: optional, a unique user ID for the user (not currently used for public docs)
*/
export default function AskAI({ userid, email, onChatLoad, ...chatParams }) {
const modalExampleQuestions = getProductExampleQuestions();
const chatAttributes = {
...(modalExampleQuestions && { modalExampleQuestions }),
...chatParams,
};
initializeChat({ onChatLoad, chatAttributes });
if (userid) {
setUser(userid, email);
}
}

263
assets/js/ask-ai.ts Normal file
View File

@ -0,0 +1,263 @@
import { productData, version } from './page-context.js';
// Type definitions for Kapa.ai widget
declare global {
interface Window {
Kapa: KapaFunction;
influxdatadocs: {
AskAI: typeof AskAI;
};
kapaSettings?: {
user: {
uniqueClientId: string;
email?: string;
};
};
}
}
// eslint-disable-next-line no-unused-vars
type KapaFunction = (command: string, options?: unknown) => void;
// Preinitialize Kapa widget to queue commands before script loads
(function () {
const k = window.Kapa;
if (!k) {
/* eslint-disable no-unused-vars */
interface KapaQueue {
(...args: unknown[]): void;
q?: unknown[][];
c?: (args: unknown[]) => void;
}
/* eslint-enable no-unused-vars */
const i = function (...args: unknown[]) {
if (i.c) {
i.c(args);
}
} as KapaQueue;
i.q = [];
i.c = function (args: unknown[]) {
if (i.q) {
i.q.push(args);
}
};
window.Kapa = i as unknown as KapaFunction;
}
})();
interface ChatAttributes extends Record<string, string | undefined> {
modalExampleQuestions?: string;
modalAskAiInputPlaceholder?: string;
modalDisclaimer?: string;
sourceGroupIdsInclude?: string;
}
interface InitializeChatParams {
onChatLoad: () => void;
chatAttributes: ChatAttributes;
}
interface AskAIParams {
userid?: string;
email?: string;
onChatLoad?: () => void;
[key: string]: unknown;
}
function setUser(userid: string, email?: string): void {
const NAMESPACE = 'kapaSettings';
// Set the user ID and email in the global settings namespace.
// The chat widget will use this on subsequent chats to personalize
// the user's experience.
window[NAMESPACE] = {
user: {
uniqueClientId: userid,
...(email && { email }),
},
};
}
// Initialize the chat widget
function initializeChat({
onChatLoad,
chatAttributes,
}: InitializeChatParams): void {
/* See https://docs.kapa.ai/integrations/website-widget/configuration for
* available configuration options.
* All values are strings.
*/
// If you make changes to data attributes here, you also need to
// port the changes to the api-docs/template.hbs API reference template.
const requiredAttributes = {
websiteId: 'a02bca75-1dd3-411e-95c0-79ee1139be4d',
projectName: 'InfluxDB',
projectColor: '#020a47',
projectLogo: '/img/influx-logo-cubo-white.png',
};
const optionalAttributes = {
modalDisclaimer:
chatAttributes.modalDisclaimer ||
'This AI can access [documentation for InfluxDB, clients, and related tools](https://docs.influxdata.com). Information you submit is used in accordance with our [Privacy Policy](https://www.influxdata.com/legal/privacy-policy/).',
modalExampleQuestions:
'Use Python to write data to InfluxDB 3,How do I query using SQL?,How do I use MQTT with Telegraf?',
buttonHide: 'true',
exampleQuestionButtonWidth: 'auto',
modalOpenOnCommandK: 'true',
modalExampleQuestionsColSpan: '8',
modalFullScreenOnMobile: 'true',
modalHeaderPadding: '.5rem',
modalInnerPositionRight: '0',
modalInnerPositionLeft: '',
modalLockScroll: 'false',
modalOverrideOpenClassAskAi: 'ask-ai-open',
modalSize: '640px',
modalWithOverlay: 'false',
modalYOffset: '10vh',
userAnalyticsFingerprintEnabled: 'true',
fontFamily: 'Proxima Nova, sans-serif',
modalHeaderBgColor: 'linear-gradient(90deg, #d30971 0%, #9b2aff 100%)',
modalHeaderBorderBottom: 'none',
modalTitleColor: '#fff',
modalTitleFontSize: '1.25rem',
};
const scriptUrl = 'https://widget.kapa.ai/kapa-widget.bundle.js';
const script = document.createElement('script');
script.async = true;
script.src = scriptUrl;
script.onload = function () {
onChatLoad();
window.influxdatadocs.AskAI = AskAI;
};
script.onerror = function () {
console.error('Error loading AI chat widget script');
};
const dataset = {
...requiredAttributes,
...optionalAttributes,
...chatAttributes,
};
Object.keys(dataset).forEach((key) => {
// Assign dataset attributes from the object
const value = dataset[key as keyof typeof dataset];
if (value !== undefined) {
script.dataset[key] = value;
}
});
// Check for an existing script element to remove
const oldScript = document.querySelector(`script[src="${scriptUrl}"]`);
if (oldScript) {
oldScript.remove();
}
document.head.appendChild(script);
}
function getVersionSpecificConfig(configKey: string): unknown {
// Try version-specific config first (e.g., ai_sample_questions__v1)
if (version && version !== 'n/a') {
const versionKey = `${configKey}__v${version}`;
const versionConfig = productData?.product?.[versionKey];
if (versionConfig) {
return versionConfig;
}
}
// Fall back to default config
return productData?.product?.[configKey];
}
function getProductExampleQuestions(): string {
const questions = getVersionSpecificConfig('ai_sample_questions') as
| string[]
| undefined;
if (!questions || questions.length === 0) {
return '';
}
return questions.join(',');
}
function getProductSourceGroupIds(): string {
const sourceGroupIds = getVersionSpecificConfig('ai_source_group_ids') as
| string
| undefined;
return sourceGroupIds || '';
}
function getProductInputPlaceholder(): string {
const placeholder = getVersionSpecificConfig('ai_input_placeholder') as
| string
| undefined;
// Return product-specific placeholder or default
return (
placeholder ||
'Ask questions about InfluxDB. Specify your product and version ' +
'for better results'
);
}
function getProductDisclaimer(): string {
// Disabled: Version-specific "Viewing documentation for..." text
// const versionNote =
// version && version !== 'n/a' && productData?.product?.name
// ? `**Viewing documentation for ${productData.product.name}**\n\n`
// : '';
// Check for product-specific custom disclaimer note
const customNote = getVersionSpecificConfig('ai_disclaimer_note') as
| string
| undefined;
const noteContent = customNote ? `${customNote}\n\n` : '';
// Base disclaimer with privacy policy link
const baseDisclaimer =
'This AI can access [documentation for InfluxDB, clients, and related tools](https://docs.influxdata.com). Information you submit is used in accordance with our [Privacy Policy](https://www.influxdata.com/legal/privacy-policy/).';
return `${noteContent}${baseDisclaimer}`;
}
/**
* Initialize the Ask AI chat widget with version-aware source filtering
*
* @param params - Configuration parameters
* @param params.userid - Optional unique user ID
* @param params.email - Optional user email
* @param params.onChatLoad - Optional callback when chat widget loads
* @param params.chatParams - Additional Kapa widget configuration attributes
*/
export default function AskAI({
userid,
email,
onChatLoad,
...chatParams
}: AskAIParams): void {
const modalExampleQuestions = getProductExampleQuestions();
const modalAskAiInputPlaceholder = getProductInputPlaceholder();
const modalDisclaimer = getProductDisclaimer();
const sourceGroupIds = getProductSourceGroupIds();
const chatAttributes: ChatAttributes = {
...(modalExampleQuestions && { modalExampleQuestions }),
...(modalAskAiInputPlaceholder && { modalAskAiInputPlaceholder }),
...(modalDisclaimer && { modalDisclaimer }),
...(sourceGroupIds && { sourceGroupIdsInclude: sourceGroupIds }),
...(chatParams as Record<string, string>),
};
const wrappedOnChatLoad = (): void => {
// Call original onChatLoad if provided
if (onChatLoad) {
onChatLoad();
}
};
initializeChat({ onChatLoad: wrappedOnChatLoad, chatAttributes });
if (userid) {
setUser(userid, email);
}
}

View File

@ -9,7 +9,7 @@ function getCurrentProductData() {
const mappings = [
{
pattern: /\/influxdb\/cloud\//,
product: products.cloud,
product: products.influxdb_cloud,
urls: influxdbUrls.influxdb_cloud,
},
{
@ -38,7 +38,12 @@ function getCurrentProductData() {
urls: influxdbUrls.clustered,
},
{
pattern: /\/enterprise_v1\//,
pattern: /\/influxdb3\/explorer/,
product: products.influxdb3_explorer,
urls: influxdbUrls.core,
},
{
pattern: /\/enterprise_influxdb\//,
product: products.enterprise_influxdb,
urls: influxdbUrls.oss,
},
@ -83,7 +88,7 @@ function getCurrentProductData() {
}
// Return the page context
// (cloud, serverless, oss/enterprise, dedicated, clustered, other)
// (cloud, serverless, oss/enterprise, dedicated, clustered, explorer, other)
function getContext() {
if (/\/influxdb\/cloud\//.test(window.location.pathname)) {
return 'cloud';
@ -97,6 +102,8 @@ function getContext() {
return 'dedicated';
} else if (/\/influxdb3\/clustered/.test(window.location.pathname)) {
return 'clustered';
} else if (/\/influxdb3\/explorer/.test(window.location.pathname)) {
return 'explorer';
} else if (
/\/(enterprise_|influxdb).*\/v[1-2]\//.test(window.location.pathname)
) {

View File

@ -0,0 +1,21 @@
---
title: Identify InfluxDB Enterprise v1 version
description: Learn how to identify your InfluxDB Enterprise v1 version using command-line tools, HTTP endpoints, and other methods.
menu:
enterprise_influxdb_v1:
name: Identify version
parent: Administration
weight: 10
source: /shared/identify-version.md
related:
- /enterprise_influxdb/v1/install-and-deploy/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
---

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
---
title: Identify InfluxDB Cloud (TSM) version
description: Learn how to identify your InfluxDB Cloud (TSM) instance through URL patterns, account settings, and HTTP headers.
menu:
influxdb_cloud:
name: Identify version
parent: Administer InfluxDB Cloud
weight: 10
source: /shared/identify-version.md
related:
- /influxdb/cloud/get-started/
- /influxdb/cloud/admin/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -0,0 +1,21 @@
---
title: Identify InfluxDB OSS v1 version
description: Learn how to identify your InfluxDB OSS v1 version using command-line tools, HTTP endpoints, and other methods.
menu:
influxdb_v1:
name: Identify version
parent: Administration
weight: 10
source: /shared/identify-version.md
related:
- /influxdb/v1/introduction/installation/
alt_links:
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -0,0 +1,23 @@
---
title: Identify InfluxDB OSS v2 version
description: Learn how to identify your InfluxDB OSS v2 version using command-line tools, the UI, and HTTP endpoints.
menu:
influxdb_v2:
name: Identify version
parent: Administer InfluxDB
weight: 10
source: /shared/identify-version.md
related:
- /influxdb/v2/get-started/
- /influxdb/v2/reference/faq/#administration-1
- /influxdb/v2/reference/cli/influxd/
alt_links:
v1: /influxdb/v1/administration/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -0,0 +1,22 @@
---
title: Identify InfluxDB Cloud Dedicated version
description: Learn how to identify your InfluxDB Cloud Dedicated cluster through URL patterns, account settings, and HTTP headers.
menu:
influxdb3_cloud_dedicated:
name: Identify version
parent: Administer InfluxDB
weight: 10
source: /shared/identify-version.md
related:
- /influxdb3/cloud-dedicated/get-started/
- /influxdb3/cloud-dedicated/admin/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -1,20 +0,0 @@
---
title: Execute SQL queries with ODBC
description: >
Use the Arrow Flight SQL ODBC driver to execute SQL queries against {{% product-name %}} from
ODBC-compatible applications and programming languages.
menu:
influxdb3_cloud_dedicated:
name: Use ODBC
parent: Execute queries
weight: 351
influxdb3/cloud-dedicated/tags: [query, sql, odbc]
metadata: [SQL]
related:
- /influxdb3/cloud-dedicated/reference/sql/
- /influxdb3/cloud-dedicated/query-data/
source: /shared/influxdb3-query-guides/execute-queries/odbc.md
---
<!-- //SOURCE content/shared/influxdb3-query-guides/execute-queries/odbc.md -->

View File

@ -10,10 +10,11 @@ menu:
weight: 104
influxdb3/cloud-dedicated/tags: [visualization, powerbi, sql]
metadata: [SQL]
aliases:
- /influxdb3/cloud-dedicated/query-data/execute-queries/odbc/
related:
- https://learn.microsoft.com/en-us/power-bi/desktop/, Power BI documentation
- /influxdb3/cloud-dedicated/query-data/sql/
- /influxdb3/cloud-dedicated/query-data/execute-queries/odbc/
source: /shared/influxdb3-visualize/powerbi.md
---

View File

@ -0,0 +1,22 @@
---
title: Identify InfluxDB Cloud Serverless version
description: Learn how to identify your InfluxDB Cloud Serverless instance through URL patterns, account settings, and HTTP headers.
menu:
influxdb3_cloud_serverless:
name: Identify version
parent: Administer InfluxDB
weight: 10
source: /shared/identify-version.md
related:
- /influxdb3/cloud-serverless/get-started/
- /influxdb3/cloud-serverless/admin/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -1,19 +0,0 @@
---
title: Execute SQL queries with ODBC
description: >
Use the Arrow Flight SQL ODBC driver to execute SQL queries against {{% product-name %}} from
ODBC-compatible applications and programming languages.
menu:
influxdb3_cloud_serverless:
name: Use ODBC
parent: Execute queries
weight: 351
influxdb3/cloud-serverless/tags: [query, sql, odbc]
metadata: [SQL]
related:
- /influxdb3/cloud-serverless/reference/sql/
- /influxdb3/cloud-serverless/query-data/
source: /shared/influxdb3-query-guides/execute-queries/odbc.md
---
<!-- //SOURCE content/shared/influxdb3-query-guides/execute-queries/odbc.md -->

View File

@ -10,11 +10,12 @@ menu:
weight: 104
influxdb3/cloud-serverless/tags: [visualization, powerbi, sql]
metadata: [SQL]
aliases:
- /influxdb3/cloud-serverless/query-data/execute-queries/odbc/
related:
- https://learn.microsoft.com/en-us/power-bi/desktop/, Power BI documentation
- /influxdb3/cloud-serverless/query-data/sql/
- /influxdb3/cloud-serverless/query-data/execute-queries/odbc/
source: /shared/influxdb3-visualize/powerbi.md
---
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->

View File

@ -0,0 +1,23 @@
---
title: Identify InfluxDB Clustered version
description: Learn how to identify your InfluxDB Clustered version using influxctl CLI and other methods.
menu:
influxdb3_clustered:
name: Identify version
parent: Administer InfluxDB Clustered
weight: 10
source: /shared/identify-version.md
related:
- /influxdb3/clustered/get-started/
- /influxdb3/clustered/admin/
- /influxdb3/clustered/reference/cli/influxctl/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -1,19 +0,0 @@
---
title: Execute SQL queries with ODBC
description: >
Use the Arrow Flight SQL ODBC driver to execute SQL queries against {{% product-name %}} from
ODBC-compatible applications and programming languages.
menu:
influxdb3_clustered:
name: Use ODBC
parent: Execute queries
weight: 351
influxdb3/clustered/tags: [query, sql, odbc]
metadata: [SQL]
related:
- /influxdb3/clustered/reference/sql/
- /influxdb3/clustered/query-data/
source: /shared/influxdb3-query-guides/execute-queries/odbc.md
---
<!-- //SOURCE content/shared/influxdb3-query-guides/execute-queries/odbc.md -->

View File

@ -10,11 +10,12 @@ menu:
weight: 104
influxdb3/clustered/tags: [visualization, powerbi, sql]
metadata: [SQL]
aliases:
- /influxdb3/clustered/query-data/execute-queries/odbc/
related:
- https://learn.microsoft.com/en-us/power-bi/desktop/, Power BI documentation
- /influxdb3/clustered/query-data/sql/
- /influxdb3/clustered/query-data/execute-queries/odbc/
source: /shared/influxdb3-visualize/powerbi.md
---
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->

View File

@ -0,0 +1,23 @@
---
title: Identify InfluxDB 3 Core version
description: Learn how to identify your InfluxDB 3 Core version using command-line tools, HTTP endpoints, and other methods.
menu:
influxdb3_core:
name: Identify version
parent: Administer InfluxDB
weight: 10
source: /shared/identify-version.md
related:
- /influxdb3/core/get-started/
- /influxdb3/core/admin/
- /influxdb3/core/reference/cli/influxdb3/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
enterprise: /influxdb3/enterprise/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -1,20 +0,0 @@
---
title: Execute SQL queries with ODBC
description: >
Use the Arrow Flight SQL ODBC driver to execute SQL queries against {{% product-name %}} from
ODBC-compatible applications and programming languages.
menu:
influxdb3_core:
name: Use ODBC
parent: Execute queries
weight: 351
influxdb3/core/tags: [query, sql, odbc]
metadata: [SQL]
related:
- /influxdb3/core/reference/sql/
- /influxdb3/core/query-data/
- /influxdb3/core/visualize-data/powerbi/
source: /shared/influxdb3-query-guides/execute-queries/odbc.md
---
<!-- //SOURCE content/shared/influxdb3-query-guides/execute-queries/odbc.md -->

View File

@ -10,11 +10,12 @@ menu:
weight: 104
influxdb3/core/tags: [visualization, powerbi, sql]
metadata: [SQL]
aliases:
- /influxdb3/core/query-data/execute-queries/odbc/
related:
- https://learn.microsoft.com/en-us/power-bi/desktop/, Power BI documentation
- /influxdb3/core/query-data/sql/
- /influxdb3/core/query-data/execute-queries/odbc/
source: /shared/influxdb3-visualize/powerbi.md
---
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->

View File

@ -2,7 +2,7 @@
title: InfluxDB 3 Enterprise documentation
description: >
InfluxDB 3 Enterprise is a time series database built on InfluxDB 3 Core open source.
It is designed to handle high write and query loads using a diskless architechture
It is designed to handle high write and query loads using a diskless architecture
that scales horizontally. Learn how to use and leverage InfluxDB in use cases such as
monitoring metrics, IoT data, and events.
menu:

View File

@ -0,0 +1,23 @@
---
title: Identify InfluxDB 3 Enterprise version
description: Learn how to identify your InfluxDB 3 Enterprise version using command-line tools, HTTP endpoints, and other methods.
menu:
influxdb3_enterprise:
name: Identify version
parent: Administer InfluxDB
weight: 10
source: /shared/identify-version.md
related:
- /influxdb3/enterprise/get-started/
- /influxdb3/enterprise/admin/
- /influxdb3/enterprise/reference/cli/influxdb3/
alt_links:
v1: /influxdb/v1/administration/identify-version/
v2: /influxdb/v2/admin/identify-version/
cloud: /influxdb/cloud/admin/identify-version/
cloud-serverless: /influxdb3/cloud-serverless/admin/identify-version/
cloud-dedicated: /influxdb3/cloud-dedicated/admin/identify-version/
clustered: /influxdb3/clustered/admin/identify-version/
core: /influxdb3/core/admin/identify-version/
enterprise_influxdb_v1: /enterprise_influxdb/v1/administration/identify-version/
---

View File

@ -2,7 +2,7 @@
title: Get started with InfluxDB 3 Enterprise
description: >
InfluxDB 3 Enterprise is a time series database built on InfluxDB 3 Core open source.
It is designed to handle high write and query loads using a diskless architechture
It is designed to handle high write and query loads using a diskless architecture
that scales horizontally. Learn how to use and leverage InfluxDB in use cases such as
monitoring metrics, IoT data, and events.
menu:

View File

@ -1,20 +0,0 @@
---
title: Execute SQL queries with ODBC
description: >
Use the Arrow Flight SQL ODBC driver to execute SQL queries against {{% product-name %}} from
ODBC-compatible applications and programming languages.
menu:
influxdb3_enterprise:
name: Use ODBC
parent: Execute queries
weight: 351
influxdb3/enterprise/tags: [query, sql, odbc]
metadata: [SQL]
related:
- /influxdb3/enterprise/reference/sql/
- /influxdb3/enterprise/query-data/
- /influxdb3/enterprise/visualize-data/powerbi/
source: /shared/influxdb3-query-guides/execute-queries/odbc.md
---
<!-- //SOURCE content/shared/influxdb3-query-guides/execute-queries/odbc.md -->

View File

@ -10,11 +10,12 @@ menu:
weight: 104
influxdb3/enterprise/tags: [visualization, powerbi, sql]
metadata: [SQL]
aliases:
- /influxdb3/enterprise/query-data/execute-queries/odbc/
related:
- https://learn.microsoft.com/en-us/power-bi/desktop/, Power BI documentation
- /influxdb3/enterprise/query-data/sql/
- /influxdb3/enterprise/query-data/execute-queries/odbc/
source: /shared/influxdb3-visualize/powerbi.md
---
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->
<!-- //SOURCE content/shared/influxdb3-visualize/powerbi.md -->

View File

@ -21,6 +21,21 @@ weight: 1
**InfluxData platform** is the leading modern [time series](/platform/faq/#what-is-time-series-data) platform, built for metrics and events.
> \[!Note]
>
> #### What's my InfluxDB version?
>
> With multiple InfluxDB deployment options available, identifying which one you're using is important for accessing the correct documentation and features.
>
> **[Identify your InfluxDB version](/platform/identify-version/)** using:
>
> - Interactive version detector
> - URL pattern recognition
> - Command-line tools
> - HTTP API headers
>
> Or browse the product lineup below to find yours.
## InfluxDB 3
**InfluxDB 3** is InfluxDBs next generation that unlocks series limitations present in the Time Structured Merge Tree (TSM) storage engine and allows infinite series cardinality without any impact on overall database performance. It also brings with it native SQL support and improved InfluxQL performance.
@ -46,7 +61,8 @@ weight: 1
## InfluxDB 2
> [!Note]
> \[!Note]
>
> #### New InfluxDB Cloud signups use InfluxDB 3
>
> New InfluxDB Cloud signups are for [InfluxDB Cloud Serverless, powered by the InfluxDB 3 storage engine](/influxdb3/cloud-serverless/).
@ -55,11 +71,12 @@ weight: 1
The **InfluxDB 2 platform** consolidates InfluxDB, Chronograf, and Kapacitor from the **InfluxData 1.x platform** into a single packaged solution, with added features and flexibility:
- [InfluxDB OSS 2.x](/influxdb/v2/get-started/): open source platform solution in a single binary
- [InfluxDB Cloud](/influxdb/cloud/get-started/) (**commercial offering**): hosted cloud solution
- [Telegraf](#telegraf): collect data
- [InfluxDB OSS 2.x](/influxdb/v2/get-started/): open source platform solution in a single binary
- [InfluxDB Cloud](/influxdb/cloud/get-started/) (**commercial offering**): hosted cloud solution
- [Telegraf](#telegraf): collect data
> [!Note]
> \[!Note]
>
> #### Integrate InfluxDB 2.0 applications with InfluxDB Enterprise 1.8+
>
> Use [InfluxDB 2.0 API compatibility endpoints](/enterprise_influxdb/v1/tools/api/#influxdb-20-api-compatibility-endpoints) to integrate applications built on InfluxDB 2.0 or InfluxDB Cloud with InfluxDB Enterprise 1.8+:
@ -71,16 +88,16 @@ The **InfluxDB 2 platform** consolidates InfluxDB, Chronograf, and Kapacitor fro
The **InfluxData 1.x platform** includes the following open source components ([TICK stack](#influxdata-1-x-tick-stack)):
- [Telegraf](#telegraf): collect data
- [InfluxDB](#influxdb): store data
- [Chronograf](#chronograf): visualize data
- [Kapacitor](#kapacitor): process data and alerts
- [Telegraf](#telegraf): collect data
- [InfluxDB](#influxdb): store data
- [Chronograf](#chronograf): visualize data
- [Kapacitor](#kapacitor): process data and alerts
**InfluxData 1.x** also includes the following **commercial offerings**:
- [InfluxDB Enterprise](#influxdb-enterprise)
- [Kapacitor Enterprise](#kapacitor-enterprise)
- [InfluxCloud 1.x](https://help.influxcloud.net) (hosted cloud solution)
- [InfluxDB Enterprise](#influxdb-enterprise)
- [Kapacitor Enterprise](#kapacitor-enterprise)
- [InfluxCloud 1.x](https://help.influxcloud.net) (hosted cloud solution)
## InfluxData 1.x TICK stack
@ -116,7 +133,7 @@ based on user-defined logic, and running ETL jobs.
InfluxDB Enterprise and Kapacitor Enterprise provide clustering, access control, and incremental backup functionality for production infrastructures at scale. You'll also receive direct support from the InfluxData support team.
> [!Note]
> \[!Note]
> InfluxDB Enterprise and Kapacitor Enterprise are compatible with open source versions of Telegraf and Chronograf.
### InfluxDB Enterprise

View File

@ -0,0 +1,10 @@
---
title: Identify your InfluxDB version
description: >
Learn how to identify which InfluxDB product and version you're using.
menu:
platform:
name: Identify version
weight: 102
source: /shared/identify-version.md
---

View File

@ -0,0 +1,432 @@
Identifying which InfluxDB product and version you're using is essential for accessing the correct documentation, troubleshooting issues, and planning upgrades.
> \[!Note]
> {{< influxdb-version-detector >}}
## Quick detection methods
{{% hide-in "core,enterprise,cloud-serverless,cloud-dedicated,clustered,v2,cloud,v1" %}}
### By URL pattern
If you access InfluxDB via a URL, the hostname often indicates which product you're using:
| URL Pattern | Product |
| ------------------------------------------ | ------------------------- |
| `*.influxdb.io` | InfluxDB Cloud Dedicated |
| `us-east-1-1.aws.cloud2.influxdata.com` | InfluxDB Cloud Serverless |
| `eu-central-1-1.aws.cloud2.influxdata.com` | InfluxDB Cloud Serverless |
| `*.influxcloud.net` | InfluxDB Cloud 1 (legacy) |
| Other `*.cloud2.influxdata.com` regions | InfluxDB Cloud (TSM) |
### By default port
Different InfluxDB products use different default ports:
- **Port 8181**: InfluxDB 3 (Core or Enterprise)
- **Port 8086**: InfluxDB v1 or v2
### By HTTP headers
Check the `/ping` endpoint to examine HTTP response headers:
```bash
curl -i http://localhost:8086/ping
```
The response headers reveal your InfluxDB product:
| Headers | Product |
| ------------------------------------------------------------- | ---------------------- |
| `x-influxdb-version: ^3.*`<br/>`x-influxdb-build: Core` | InfluxDB 3 Core |
| `x-influxdb-version: ^3.*`<br/>`x-influxdb-build: Enterprise` | InfluxDB 3 Enterprise |
| `x-influxdb-version: ^2.*`<br/>`x-influxdb-build: OSS` | InfluxDB OSS v2 |
| `x-influxdb-version: ^1.*`<br/>`x-influxdb-build: OSS` | InfluxDB OSS v1 |
| `x-influxdb-build: Enterprise`<br/>(with v1 version) | InfluxDB Enterprise v1 |
{{% /hide-in %}}
{{% show-in "core" %}}
### InfluxDB 3 Core detection
Check the version using the `influxdb3` command:
```bash
influxdb3 --version
```
Query the `/health` endpoint:
```bash
curl http://localhost:8181/health
```
Check the `/ping` endpoint headers:
```bash
curl -i http://localhost:8181/ping
```
Look for:
- `x-influxdb-version`: Version number (for example, `3.6.0`)
- `x-influxdb-build`: `Core`
{{% /show-in %}}
{{% show-in "enterprise" %}}
### InfluxDB 3 Enterprise detection
Check the version using the `influxdb3` command:
```bash
influxdb3 --version
```
Query the `/health` endpoint:
```bash
curl http://localhost:8181/health
```
Check the `/ping` endpoint headers:
```bash
curl -i http://localhost:8181/ping
```
Look for:
- `x-influxdb-version`: Version number (for example, `3.6.0`)
- `x-influxdb-build`: `Enterprise`
{{% /show-in %}}
{{% show-in "clustered" %}}
### InfluxDB Clustered detection
Use the `influxctl` CLI to check your cluster version:
```bash
influxctl version
```
To view cluster information:
```bash
influxctl cluster list
```
{{% /show-in %}}
{{% show-in "cloud-serverless" %}}
### InfluxDB Cloud Serverless detection
**InfluxDB Cloud Serverless** can be identified by:
**URL patterns**:
- `us-east-1-1.aws.cloud2.influxdata.com`
- `eu-central-1-1.aws.cloud2.influxdata.com`
**Account settings**: Check your InfluxDB Cloud account dashboard for product and version details.
**HTTP headers**: API responses include version information in response headers.
{{% /show-in %}}
{{% show-in "cloud-dedicated" %}}
### InfluxDB Cloud Dedicated detection
**InfluxDB Cloud Dedicated** can be identified by:
**URL pattern**: `*.influxdb.io`
- Example: `cluster-id.a.influxdb.io`
**Account settings**: Check your InfluxDB Cloud Dedicated account dashboard for cluster and version details.
**HTTP headers**: API responses include version information in response headers.
{{% /show-in %}}
{{% show-in "v2" %}}
### InfluxDB OSS v2 detection
Check the version using `influxd`:
```bash
influxd version
```
Query the `/health` endpoint and extract the version:
```bash
curl -s http://localhost:8086/health | jq -r '.version'
```
The InfluxDB UI displays the version:
- On the login page
- In the right column of the main landing page
- In the user menu dropdown
For more details, see [How can I identify my InfluxDB version?](/influxdb/v2/reference/faq/#administration-1)
{{% /show-in %}}
{{% show-in "cloud" %}}
### InfluxDB Cloud (TSM) detection
**InfluxDB Cloud (TSM)** can be identified by:
**URL patterns** (regional cloud2.influxdata.com URLs, excluding Serverless regions):
- `us-west-2-1.aws.cloud2.influxdata.com`
- `us-west-2-2.aws.cloud2.influxdata.com`
- `us-east-1-2.aws.cloud2.influxdata.com` (note: different from Serverless)
- `us-central1-1.gcp.cloud2.influxdata.com`
- `westeurope-1.azure.cloud2.influxdata.com`
- `eastus-1.azure.cloud2.influxdata.com`
**Account settings**: Check your InfluxDB Cloud account dashboard for product details.
**HTTP headers**: API responses include version information in response headers.
{{% /show-in %}}
{{% show-in "v1" %}}
### InfluxDB OSS v1 / Enterprise v1 detection
Check the version using `influxd`:
```bash
influxd version
```
Check the `/ping` endpoint headers:
```bash
curl -i http://localhost:8086/ping
```
Look for the `x-influxdb-version` header (for example, `1.11.7`).
For Enterprise v1, the `x-influxdb-build` header will show `Enterprise`.
{{% /show-in %}}
{{% hide-in "core,enterprise,cloud-serverless,cloud-dedicated,clustered,v2,cloud,v1" %}}
## Product-specific methods
### InfluxDB 3 Core and Enterprise
{{< tabs-wrapper >}}
{{% tabs %}}
[Command line](#)
[Health endpoint](#)
[HTTP headers](#)
{{% /tabs %}}
{{% tab-content %}}
Check the version using the `influxdb3` command:
```bash
influxdb3 --version
```
{{% /tab-content %}}
{{% tab-content %}}
Query the `/health` endpoint:
```bash
curl http://localhost:8181/health
```
The response includes version information and build details.
{{% /tab-content %}}
{{% tab-content %}}
Check the `/ping` endpoint headers:
```bash
curl -i http://localhost:8181/ping
```
Look for:
- `x-influxdb-version`: Version number (for example, `3.6.0`)
- `x-influxdb-build`: `Core` or `Enterprise`
{{% /tab-content %}}
{{< /tabs-wrapper >}}
### InfluxDB Clustered
Use the `influxctl` CLI to check your cluster version:
```bash
influxctl version
```
To view cluster information:
```bash
influxctl cluster list
```
### InfluxDB OSS v2
{{< tabs-wrapper >}}
{{% tabs %}}
[Command line](#)
[Health API](#)
[User interface](#)
{{% /tabs %}}
{{% tab-content %}}
Check the version using `influxd`:
```bash
influxd version
```
**Example output:**
```
InfluxDB 2.7.12 (git: x0x000xx0x) build_date: 2024-MM-DDThh:mm:ssZ
```
{{% /tab-content %}}
{{% tab-content %}}
Query the `/health` endpoint and extract the version:
```bash
curl -s http://localhost:8086/health | jq -r '.version'
```
{{% /tab-content %}}
{{% tab-content %}}
The InfluxDB UI displays the version:
- On the login page
- In the right column of the main landing page
- In the user menu dropdown
{{% /tab-content %}}
{{< /tabs-wrapper >}}
For more details, see [How can I identify my InfluxDB version?](/influxdb/v2/reference/faq/#administration-1)
### InfluxDB Cloud (Serverless, Dedicated, TSM)
For InfluxDB Cloud products, check the version information:
- **Account settings**: Version details appear in your account dashboard
- **UI footer**: The version may be displayed at the bottom of the web interface
- **HTTP headers**: API responses include version headers
- **URL pattern**: See [By URL pattern](#by-url-pattern) above
### InfluxDB OSS v1 and Enterprise v1
{{< tabs-wrapper >}}
{{% tabs %}}
[Command line](#)
[HTTP API](#)
{{% /tabs %}}
{{% tab-content %}}
Check the version using `influxd`:
```bash
influxd version
```
{{% /tab-content %}}
{{% tab-content %}}
Check the `/ping` endpoint headers:
```bash
curl -i http://localhost:8086/ping
```
Look for the `x-influxdb-version` header (for example, `1.11.7`).
{{% /tab-content %}}
{{< /tabs-wrapper >}}
{{% /hide-in %}}
{{% hide-in "core,enterprise,cloud-serverless,cloud-dedicated,clustered,v2,cloud,v1,enterprise-v1" %}}
## Understanding InfluxDB products
InfluxData offers multiple InfluxDB products to suit different use cases:
| Product | License | Hosting | Query Languages | Default Port |
| ----------------------------- | --------- | ------------------------ | ------------------- | ------------ |
| **InfluxDB 3 Core** | Free | Self-hosted | SQL, InfluxQL | 8181 |
| **InfluxDB 3 Enterprise** | Paid | Self-hosted | SQL, InfluxQL | 8181 |
| **InfluxDB Cloud Serverless** | Free/Paid | Cloud | SQL, InfluxQL, Flux | N/A |
| **InfluxDB Cloud Dedicated** | Paid | Cloud | SQL, InfluxQL | N/A |
| **InfluxDB Clustered** | Paid | Self-hosted (Kubernetes) | SQL, InfluxQL | Custom |
| **InfluxDB OSS v2** | Free | Self-hosted | InfluxQL, Flux | 8086 |
| **InfluxDB Cloud (TSM)** | Free/Paid | Cloud | InfluxQL, Flux | N/A |
| **InfluxDB OSS v1** | Free | Self-hosted | InfluxQL | 8086 |
| **InfluxDB Enterprise v1** | Paid | Self-hosted | InfluxQL, Flux | 8086 |
| **InfluxDB Cloud 1** | Paid | Cloud | InfluxQL | N/A |
### Key characteristics
- **InfluxDB 3** products use SQL and InfluxQL, run on port 8181 (self-hosted), and provide improved performance and scalability
- **InfluxDB v2** products use InfluxQL and Flux, run on port 8086 (self-hosted), and use a bucket-based data model
- **InfluxDB v1** products use InfluxQL, run on port 8086 (self-hosted), and use a database-based data model
{{% /hide-in %}}
## Understanding InfluxDB products
For a complete comparison of InfluxDB versions and deployment options, see the [InfluxDB platform overview](/platform/).
## Troubleshooting
### Can't access your InfluxDB instance?
If you can't directly access your InfluxDB instance:
1. Use the [interactive version detector](#identify-your-influxdb-version) above or {{< ask-ai-link link-text="Ask InfluxData AI" query="Help determine my InfluxDB version based on licensing, hosting, server age, and API." >}}
2. Answer questions about your setup:
- License type (paid or free)
- Hosting model (cloud or self-hosted)
- Server age
- Query language preferences
3. Get product recommendations based on your answers
### Still not sure?
If you're still uncertain, see the [Support and feedback](#bug-reports-and-feedback) options.

View File

@ -1,5 +1,4 @@
Use InfluxQL (an SQL-like query language) to interact with InfluxDB, and query and analyze your times series data.
Use InfluxQL (an SQL-like query language) to interact with InfluxDB, and API features analyze your times series data.
In InfluxDB 1.x, data is stored in [databases](/influxdb/v1/concepts/glossary/#database)
and [retention policies](/influxdb/v1/concepts/glossary/#retention-policy-rp).
@ -23,16 +22,16 @@ For complete InfluxQL reference documentation, see the
## Verify buckets have a mapping
1. To verify the buckets you want to query are mapped to a database and retention policy, use the [`influx` CLI](/influxdb/version/reference/cli/influx/) or the [InfluxDB API](/influxdb/version/reference/api/).
_For examples, see [List DBRP mappings](/influxdb/version/query-data/influxql/dbrp/#list-dbrp-mappings)._
*For examples, see [List DBRP mappings](/influxdb/version/query-data/influxql/dbrp/#list-dbrp-mappings).*
2. If you **do not find a DBRP mapping for a bucket**, [create a new DBRP mapping](/influxdb/version/query-data/influxql/dbrp/#create-dbrp-mappings) to
map the unmapped bucket.
map the unmapped bucket.
## Create DBRP mappings for unmapped buckets
- Use the [`influx` CLI](/influxdb/version/reference/cli/influx/) or the [InfluxDB API](/influxdb/version/reference/api/)
to manually create DBRP mappings for unmapped buckets.
_For examples, see [Create DBRP mappings](/influxdb/version/query-data/influxql/dbrp/#create-dbrp-mappings)._
to manually create DBRP mappings for unmapped buckets.
*For examples, see [Create DBRP mappings](/influxdb/version/query-data/influxql/dbrp/#create-dbrp-mappings).*
## Query a mapped bucket with InfluxQL
@ -42,6 +41,7 @@ _For examples, see [Create DBRP mappings](/influxdb/version/query-data/influxql/
[InfluxDB API](#)
{{% /tabs %}}
{{% tab-content %}}
<!---------------------------- BEGIN InfluxQL shell --------------------------->
The [`influx` CLI](/influxdb/version/reference/cli/influx/) provides an [InfluxQL shell](/influxdb/version/tools/influxql-shell/) where you can execute InfluxQL queries in an interactive Read-Eval-Print-Loop (REPL).
@ -66,8 +66,10 @@ The [`influx` CLI](/influxdb/version/reference/cli/influx/) provides an [InfluxQ
For more information, see how to [use the InfluxQL shell](/influxdb/version/tools/influxql-shell/). For more information about DBRP mappings, see [Manage DBRP mappings](/influxdb/version/query-data/influxql/dbrp/).
<!----------------------------- END InfluxQL shell ---------------------------->
{{% /tab-content %}}
{{% tab-content %}}
<!----------------------------- BEGIN InfluxDB API ---------------------------->
The [InfluxDB 1.x compatibility API](/influxdb/version/reference/api/influxdb-1x/) supports
@ -77,10 +79,10 @@ all InfluxDB 1.x client libraries and integrations in InfluxDB {{< current-versi
- **Request method:** `GET`
- **Headers:**
- **Authorization:** _See [compatibility API authentication](/influxdb/version/reference/api/influxdb-1x/#authentication)_
- **Authorization:** *See [compatibility API authentication](/influxdb/version/reference/api/influxdb-1x/#authentication)*
- **Query parameters:**
- **db**: 1.x database to query
- **rp**: 1.x retention policy to query _(if no retention policy is specified, InfluxDB uses the default retention policy for the specified database)_
- **rp**: 1.x retention policy to query *(if no retention policy is specified, InfluxDB uses the default retention policy for the specified database)*
- **q**: URL-encoded InfluxQL query
{{% api/url-encode-note %}}
@ -96,7 +98,9 @@ all InfluxDB 1.x client libraries and integrations in InfluxDB {{< current-versi
2. (Optional) To return results as **CSV**, include the `Accept: application/csv` header.
For more information about DBRP mappings, see [Manage DBRP mappings](/influxdb/version/query-data/influxql/dbrp/).
<!------------------------------ END InfluxDB API ----------------------------->
{{% /tab-content %}}
{{< /tabs-wrapper >}}
@ -107,12 +111,13 @@ InfluxDB OSS 2.x supports the following InfluxQL statements and clauses. See sup
{{< flex >}}
{{< flex-content >}}
{{% note %}}
##### Supported InfluxQL queries
- `DELETE`*
- `DROP MEASUREMENT`*
- `DELETE`\*
- `DROP MEASUREMENT`\*
- `EXPLAIN ANALYZE`
- `SELECT` _(read-only)_
- `SELECT` *(read-only)*
- `SHOW DATABASES`
- `SHOW SERIES`
- `SHOW MEASUREMENTS`
@ -133,11 +138,11 @@ InfluxDB OSS 2.x supports the following InfluxQL statements and clauses. See sup
- `SELECT INTO`
- `ALTER`
- `CREATE`
- `DROP` _(limited support)_
- `DROP` *(limited support)*
- `GRANT`
- `KILL`
- `REVOKE`
- `SHOW SERIES CARDINALITY`
{{% /warn %}}
{{< /flex-content >}}
{{< /flex >}}
{{% /warn %}}
{{< /flex-content >}}
{{< /flex >}}

View File

@ -1,533 +0,0 @@
Use the Arrow Flight SQL ODBC driver to execute SQL queries against
{{% product-name %}} from ODBC-compatible applications and programming languages.
ODBC (Open Database Connectivity) is a standard API for accessing database
management systems. The Arrow Flight SQL ODBC driver enables ODBC-compatible
applications to connect to {{% product-name %}} and query data using SQL.
- [Download and install the ODBC driver](#download-and-install-the-odbc-driver)
- [Configure a data source](#configure-a-data-source)
- [Connect and query from applications](#connect-and-query-from-applications)
- [Use ODBC with programming languages](#use-odbc-with-programming-languages)
## Download and install the ODBC driver
{{% product-name %}} uses the Arrow Flight SQL ODBC driver to enable ODBC connectivity.
> [!Note]
> For more information about the Arrow Flight SQL ODBC Driver, see the [Dremio documentation](https://docs.dremio.com/current/client-applications/drivers/arrow-flight-sql-odbc-driver/).
{{< tabs-wrapper >}}
{{% tabs %}}
[Windows (PowerShell)](#)
[Windows (Manual)](#)
[macOS and Linux](#)
{{% /tabs %}}
{{% tab-content %}}
Run the following PowerShell commands to download and install:
{{% code-placeholders "YOUR_USER" %}}
```powershell
# Set the driver path
$driverPath = "C:\Users\YOUR_USER\Downloads\arrow-flight-sql-odbc-0.9.7.1195-win64.msi"
# Download the driver
Invoke-WebRequest -Uri "https://docs.influxdata.com/downloads/arrow-flight-sql-odbc-0.9.7.1195-win64.msi" `
-OutFile $driverPath
# Mark as trusted
Unblock-File $driverPath
# Install
Start-Process msiexec.exe -Wait -ArgumentList "/i `"$driverPath`""
```
{{% /code-placeholders %}}
Replace the following:
- {{% code-placeholder-key %}}`YOUR_USER`{{% /code-placeholder-key %}}: Your Windows username
#### Verify installation
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **Drivers** tab
3. Verify **Arrow Flight SQL ODBC Driver** appears in the list
{{% /tab-content %}}
{{% tab-content %}}
<a class="btn" href="https://docs.influxdata.com/downloads/arrow-flight-sql-odbc-0.9.7.1195-win64.msi">Download the Arrow Flight SQL ODBC driver</a>
1. Run the downloaded `.msi` installer
2. Follow the installation wizard using default settings
3. Complete the installation
#### Verify installation
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **Drivers** tab
3. Verify **Arrow Flight SQL ODBC Driver** appears in the list
{{% /tab-content %}}
{{% tab-content %}}
Download from Dremio:
- [**macOS (Universal)**](https://download.dremio.com/arrow-flight-sql-odbc-driver/arrow-flight-sql-odbc-LATEST-universal.pkg)
- [**Linux (x86_64)**](https://download.dremio.com/arrow-flight-sql-odbc-driver/arrow-flight-sql-odbc-LATEST-linux-x86_64.tar.gz)
#### Install on macOS
1. Run the downloaded `.pkg` installer
2. Follow the installation prompts
3. Enter your administrator password when prompted
4. Complete the installation
#### Install on Linux
1. Extract the downloaded archive:
```bash
tar -xzf arrow-flight-sql-odbc-LATEST-linux-x86_64.tar.gz
```
2. Install the driver (installation location may vary by distribution):
```bash
sudo mkdir -p /opt/arrow-flight-sql-odbc
sudo cp -r lib /opt/arrow-flight-sql-odbc/
```
3. Configure the driver in `/etc/odbcinst.ini`:
```ini
[Arrow Flight SQL ODBC Driver]
Description = Arrow Flight SQL ODBC Driver
Driver = /opt/arrow-flight-sql-odbc/lib/libarrow-odbc.so
```
#### Verify installation
To verify the driver is installed correctly, run:
```bash
odbcinst -q -d
```
The output should include **Arrow Flight SQL**.
{{% /tab-content %}}
{{< /tabs-wrapper >}}
## Configure a data source
After installing the Arrow Flight SQL ODBC driver, configure a data source to
connect to {{% product-name %}}.
{{< tabs-wrapper >}}
{{% tabs %}}
[Windows](#)
[macOS and Linux](#)
{{% /tabs %}}
{{% tab-content %}}
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **System DSN** or **User DSN** tab
3. Click **Add**
4. Select **Arrow Flight SQL ODBC Driver** and click **Finish**
5. Configure the connection:
- **Data Source Name**: Provide a descriptive name (for example, `InfluxDB3`)
- **Host**: Your {{% product-name %}} host (for example, {{% show-in "cloud-serverless" %}}`us-west-2-1.aws.cloud2.influxdata.com`{{% /show-in %}}{{% show-in "enterprise,core" %}}`localhost`{{% /show-in %}}{{% show-in "cloud-dedicated" %}}`cluster-id.a.influxdb.io`{{% /show-in %}}{{% show-in "clustered" %}}`cluster-host.com`{{% /show-in %}})
- **Port**: Your InfluxDB URL port {{% show-in "cloud-serverless,cloud-dedicated,clustered" %}}(for example, `443` (HTTPS){{% /show-in %}}{{% show-in "enterprise,core" %}}`8181` (default){{% /show-in %}})
- **Database**: Your database name
- **Auth Token**: Your {{% show-in "cloud-dedicated,clustered" %}}{{% token-link "database" %}}{{% /show-in %}}{{% show-in "cloud-serverless" %}}{{% token-link %}}{{% /show-in %}}{{% show-in "core,enterprise" %}}{{% token-link "admin" "database" %}}{{% /show-in %}}{{% show-in "cloud-dedicated,clustered,enterprise" %}}&nbsp;with query permissions for the target database{{% /show-in %}}
- **Use Encryption**: Enable for HTTPS connections
6. Click **Test** to verify the connection
7. Click **OK** to save
{{% /tab-content %}}
{{% tab-content %}}
Create or edit `~/.odbc.ini` (user DSN) or `/etc/odbc.ini` (system DSN):
{{% show-in "enterprise,core" %}}
{{% code-placeholders "DATABASE_NAME|DATABASE_TOKEN" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = localhost
Port = 8181
Database = DATABASE_NAME
AuthToken = DATABASE_TOKEN
UseEncryption = 1
```
{{% /code-placeholders %}}
{{% /show-in %}}
{{% show-in "cloud-serverless" %}}
{{% code-placeholders "DATABASE_NAME|DATABASE_TOKEN" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = us-west-2-1.aws.cloud2.influxdata.com
Port = 443
Database = DATABASE_NAME
AuthToken = DATABASE_TOKEN
UseEncryption = 1
```
{{% /code-placeholders %}}
{{% /show-in %}}
{{% show-in "cloud-dedicated" %}}
{{% code-placeholders "DATABASE_NAME|DATABASE_TOKEN" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = cluster-id.a.influxdb.io
Port = 443
Database = DATABASE_NAME
AuthToken = DATABASE_TOKEN
UseEncryption = 1
```
{{% /code-placeholders %}}
{{% /show-in %}}
{{% show-in "clustered" %}}
{{% code-placeholders "DATABASE_NAME|DATABASE_TOKEN" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = cluster-host.com
Port = 443
Database = DATABASE_NAME
AuthToken = DATABASE_TOKEN
UseEncryption = 1
```
{{% /code-placeholders %}}
{{% /show-in %}}
Replace the following:
- {{% code-placeholder-key %}}`DATABASE_NAME`{{% /code-placeholder-key %}}: Your database name
- {{% code-placeholder-key %}}`DATABASE_TOKEN`{{% /code-placeholder-key %}}: Your {{% token-link "database" %}}{{% show-in "enterprise" %}} with query permissions{{% /show-in %}}
Test the connection:
```bash
isql -v InfluxDB3
```
{{% /tab-content %}}
{{< /tabs-wrapper >}}
## Connect and query from applications
After configuring a data source, connect from ODBC-compatible applications:
### Power BI
See [Use Power BI to visualize data](/influxdb3/version/visualize-data/powerbi/).
### Tableau
See [Use Tableau to visualize data](/influxdb3/version/visualize-data/tableau/).
### Excel
1. Open Excel
2. Go to **Data** > **Get Data** > **From Other Sources** > **From ODBC**
3. Select your InfluxDB data source
4. Enter credentials if prompted
5. Select tables and load data
### DBeaver
1. Create a new database connection
2. Select **ODBC** as the connection type
3. Configure the connection:
- **Database/Schema**: Your InfluxDB database
- **ODBC DSN**: Your configured data source name
4. Test and save the connection
## Use ODBC with programming languages
### Python with pyodbc
```python
import pyodbc
# Connect to InfluxDB
conn = pyodbc.connect(
'DSN=InfluxDB3',
autocommit=True
)
# Create cursor
cursor = conn.cursor()
# Execute query
cursor.execute("""
SELECT
time,
temp,
location
FROM
home
WHERE
time >= now() - INTERVAL '1 hour'
ORDER BY
time DESC
""")
# Fetch results
for row in cursor.fetchall():
print(row)
# Close connection
cursor.close()
conn.close()
```
### R with RODBC
```r
library(RODBC)
# Connect to InfluxDB
conn <- odbcConnect("InfluxDB3")
# Execute query
result <- sqlQuery(conn, "
SELECT
time,
temp,
location
FROM
home
WHERE
time >= now() - INTERVAL '1 hour'
ORDER BY
time DESC
")
# View results
print(result)
# Close connection
odbcClose(conn)
```
### C# with `System.Data.Odbc`
```csharp
using System;
using System.Data.Odbc;
class Program
{
static void Main()
{
string connectionString = "DSN=InfluxDB3";
using (OdbcConnection conn = new OdbcConnection(connectionString))
{
conn.Open();
string query = @"
SELECT
time,
temp,
location
FROM
home
WHERE
time >= now() - INTERVAL '1 hour'
ORDER BY
time DESC
";
using (OdbcCommand cmd = new OdbcCommand(query, conn))
using (OdbcDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader["time"]} - {reader["temp"]} - {reader["location"]}");
}
}
}
}
}
```
## Connection string format
For applications that use connection strings directly:
```
Driver={Arrow Flight SQL ODBC Driver};Host=HOST;Port=PORT;Database=DATABASE;AuthToken=TOKEN;UseEncryption=1
```
Example:
{{% code-placeholders "DATABASE_NAME|DATABASE_TOKEN" %}}
```
Driver={Arrow Flight SQL ODBC Driver};Host=localhost;Port=8181;Database=DATABASE_NAME;AuthToken=DATABASE_TOKEN;UseEncryption=1
```
{{% /code-placeholders %}}
{{% show-in "cloud-serverless,cloud-dedicated" %}}
For {{% product-name %}}, use port `443`:
{{% code-placeholders "DATABASE_NAME|DATABASE_TOKEN" %}}
```
Driver={Arrow Flight SQL ODBC Driver};Host=cluster-id.a.influxdb.io;Port=443;Database=DATABASE_NAME;AuthToken=DATABASE_TOKEN;UseEncryption=1
```
{{% /code-placeholders %}}
{{% /show-in %}}
## Configuration options
### Connection parameters
| Parameter | Description | Default |
| -------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- |
| `Host` | InfluxDB server hostname | Required |
| `Port` | InfluxDB server port | Required {{% show-in "core,enterprise" %}}(`8181`){{% /show-in %}} |
| `Database` | Database name | Required |
| `AuthToken` | Authentication token | Required |
| `UseEncryption` | Use encrypted connection | `1` (enabled) |
| `TrustedCerts` | Path to trusted CA certificates | System default |
| `DisableCertificateVerification` | Skip certificate verification | `0` (disabled) |
### Advanced options
Add these to your DSN configuration or connection string as needed:
{{% show-in "enterprise,core" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = localhost
Port = 8181
Database = mydb
AuthToken = your-token
UseEncryption = 1
DisableCertificateVerification = 0
```
{{% /show-in %}}
{{% show-in "cloud-serverless" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = us-west-2-1.aws.cloud2.influxdata.com
Port = 443
Database = mydb
AuthToken = your-token
UseEncryption = 1
DisableCertificateVerification = 0
```
{{% /show-in %}}
{{% show-in "cloud-dedicated" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = cluster-id.a.influxdb.io
Port = 443
Database = mydb
AuthToken = your-token
UseEncryption = 1
DisableCertificateVerification = 0
```
{{% /show-in %}}
{{% show-in "clustered" %}}
```ini
[InfluxDB3]
Driver = Arrow Flight SQL ODBC Driver
Host = cluster-host.com
Port = 443
Database = mydb
AuthToken = your-token
UseEncryption = 1
DisableCertificateVerification = 0
```
{{% /show-in %}}
## Troubleshooting
### Driver not found
If applications cannot find the Arrow Flight SQL ODBC driver:
{{< tabs-wrapper >}}
{{% tabs %}}
[Windows](#)
[macOS and Linux](#)
{{% /tabs %}}
{{% tab-content %}}
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **Drivers** tab
3. Verify **Arrow Flight SQL ODBC Driver** appears in the list
4. If not listed, reinstall the driver
{{% /tab-content %}}
{{% tab-content %}}
1. Run the following command to list installed drivers:
```bash
odbcinst -q -d
```
2. Verify **Arrow Flight SQL** appears in the output
3. Check `/etc/odbcinst.ini` for proper driver configuration
4. Ensure the driver library path is correct
{{% /tab-content %}}
{{< /tabs-wrapper >}}
### Connection failures
If you cannot connect to {{% product-name %}}:
- Verify your {{% product-name %}} instance is running and accessible
- Check host and port settings:
- Local instances: `localhost:8181`
- {{% show-in "cloud-serverless,cloud-dedicated" %}}{{% product-name %}}: Use your cluster URL with port `443`{{% /show-in %}}
- Ensure `UseEncryption` is set correctly for your connection type
- Verify network connectivity and firewall rules allow connections
### Authentication errors
If authentication fails:
- Confirm your token is valid and not expired
- Ensure the token is specified in the `AuthToken` parameter (not `Token`)
- {{% show-in "enterprise" %}}Verify the token has query permissions for the target database{{% /show-in %}}
- Check that the token was copied correctly without extra spaces or characters
### Query errors
If queries fail or return errors:
- Verify SQL syntax is correct for InfluxDB SQL
- Check that referenced tables (measurements) exist in the database
- Ensure column names match your schema
- Review the [SQL reference](/influxdb3/version/reference/sql/) for supported features
- For large result sets, consider adding `LIMIT` clauses
### Performance issues
For slow queries or connection timeouts:
- Add time range filters to limit data scanned
- Use appropriate indexes if available
- Increase timeout values in your DSN configuration
- Monitor query execution plans for optimization opportunities

View File

@ -9,15 +9,15 @@ Note: The Microsoft Power BI Connector for InfluxDB is currently in BETA
>
> {{% cite %}}-- [Microsoft Power BI documentation](https://learn.microsoft.com/en-us/power-bi/fundamentals/power-bi-overview){{% /cite %}}
> [!Important]
> \[!Important]
> These instructions are for Power BI Desktop only; it uses a custom connector.
- [Prerequisites](#prerequisites)
- [Install the Power BI connector](#install-the-power-bi-connector)
- [Install the Arrow Flight SQL ODBC Driver](#install-the-arrow-flight-sql-odbc-driver)
- [Enable the connector in Power BI](#enable-the-connector-in-power-bi)
- [Connect Power BI to InfluxDB](#connect-power-bi-to-influxdb)
- [Query and visualize data](#query-and-visualize-data)
1. [Prerequisites](#prerequisites)
2. [Install the Arrow Flight SQL ODBC driver](#install-the-arrow-flight-sql-odbc-driver)
3. [Install the Power BI connector](#install-the-power-bi-connector)
4. [Enable the connector in Power BI](#enable-the-connector-in-power-bi)
5. [Connect Power BI to InfluxDB](#connect-power-bi-to-influxdb)
6. [Query and visualize data](#query-and-visualize-data)
## Prerequisites
@ -28,65 +28,141 @@ Note: The Microsoft Power BI Connector for InfluxDB is currently in BETA
- **{{% product-name %}}**: A running instance with data to query
- **Database token**: Your {{% show-in "cloud-dedicated, clustered" %}}{{% token-link "database" %}}{{% /show-in %}}{{% show-in "cloud-serverless" %}}{{% token-link %}}{{% /show-in %}}{{% show-in "core, enterprise" %}}{{% token-link "admin" "database" %}}{{% /show-in %}}{{% show-in "enterprise" %}} with query permissions for the target database{{% /show-in %}}
The following steps guide you through downloading and installing the Arrow Flight SQL ODBC Driver and the InfluxDB 3 custom connector.
## Install the Arrow Flight SQL ODBC driver
## Install the Power BI connector
The InfluxDB 3 custom connector for Power BI requires the Arrow Flight SQL ODBC driver.
Install the driver before installing the Power BI connector.
The InfluxDB 3 custom connector for Power BI Desktop enables you to connect to
{{% product-name %}} and query data using SQL.
> \[!Note]
> For more information about the Arrow Flight SQL ODBC Driver, see the [Dremio documentation](https://docs.dremio.com/current/client-applications/drivers/arrow-flight-sql-odbc-driver/).
### Install the Arrow Flight SQL ODBC Driver
{{< tabs-wrapper >}}
{{% tabs %}}
[Windows (PowerShell)](#)
[Windows (Manual)](#)
[macOS and Linux](#)
{{% /tabs %}}
The custom connector requires the Arrow Flight SQL ODBC Driver.
{{% tab-content %}}
Run the following PowerShell commands to download and install:
<a class="btn" href="https://docs.influxdata.com/downloads/arrow-flight-sql-odbc-0.9.7.1195-win64.msi">Download the Arrow Flight SQL ODBC driver</a>
{{% code-placeholders "YOUR\_USER" %}}
Or use PowerShell to download and install:
{{% code-placeholders "YOUR_USER" %}}
```powershell
# Set the driver path
$driverPath = "C:\Users\YOUR_USER\Downloads\arrow-flight-sql-odbc-0.9.7.1195-win64.msi"
# Download the driver
Invoke-WebRequest -Uri "https://docs.influxdata.com/downloads/arrow-flight-sql-odbc-0.9.7.1195-win64.msi" `
-OutFile "C:\Users\YOUR_USER\Downloads\arrow-flight-sql-odbc-0.9.7.1195-win64.msi"
-OutFile $driverPath
# Mark as trusted
Unblock-File "C:\Users\YOUR_USER\Downloads\arrow-flight-sql-odbc-0.9.7.1195-win64.msi"
Unblock-File $driverPath
# Install
Start-Process msiexec.exe -Wait -ArgumentList '/i "C:\Users\YOUR_USER\Downloads\arrow-flight-sql-odbc-0.9.7.1195-win64.msi"'
Start-Process msiexec.exe -Wait -ArgumentList "/i `"$driverPath`""
```
{{% /code-placeholders %}}
Replace the following:
- {{% code-placeholder-key %}}`YOUR_USER`{{% /code-placeholder-key %}}: Your Windows username
Follow the installation wizard using default settings.
#### Verify driver installation
> [!Note]
> For more information about the Arrow Flight SQL ODBC Driver, see the [Dremio documentation](https://docs.dremio.com/current/client-applications/drivers/arrow-flight-sql-odbc-driver/).
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **Drivers** tab
3. Verify **Arrow Flight SQL ODBC Driver** appears in the list
### Install the Power BI connector file
{{% /tab-content %}}
{{% tab-content %}} <a class="btn" href="https://docs.influxdata.com/downloads/arrow-flight-sql-odbc-0.9.7.1195-win64.msi">Download the Arrow Flight SQL ODBC driver</a>
1. Run the downloaded `.msi` installer
2. Follow the installation wizard using default settings
3. Complete the installation
#### Verify driver installation
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **Drivers** tab
3. Verify **Arrow Flight SQL ODBC Driver** appears in the list
{{% /tab-content %}}
{{% tab-content %}}
Download from Dremio:
- [**macOS (Universal)**](https://download.dremio.com/arrow-flight-sql-odbc-driver/arrow-flight-sql-odbc-LATEST-universal.pkg)
- [**Linux (x86\_64)**](https://download.dremio.com/arrow-flight-sql-odbc-driver/arrow-flight-sql-odbc-LATEST-linux-x86_64.tar.gz)
#### Install on macOS
1. Run the downloaded `.pkg` installer
2. Follow the installation prompts
3. Enter your administrator password when prompted
4. Complete the installation
#### Install on Linux
1. Extract the downloaded archive:
```bash
tar -xzf arrow-flight-sql-odbc-LATEST-linux-x86_64.tar.gz
```
2. Install the driver (installation location may vary by distribution):
```bash
sudo mkdir -p /opt/arrow-flight-sql-odbc
sudo cp -r lib /opt/arrow-flight-sql-odbc/
```
3. Configure the driver in `/etc/odbcinst.ini`:
```ini
[Arrow Flight SQL ODBC Driver]
Description = Arrow Flight SQL ODBC Driver
Driver = /opt/arrow-flight-sql-odbc/lib/libarrow-odbc.so
```
#### Verify driver installation
To verify the driver is installed correctly, run:
```bash
odbcinst -q -d
```
The output should include **Arrow Flight SQL**.
{{% /tab-content %}}
{{< /tabs-wrapper >}}
## Install the Power BI connector
After installing the ODBC driver, download and install the InfluxDB 3 custom connector for Power BI Desktop.
<a class="btn" href="https://docs.influxdata.com/downloads/InfluxDB.pqx">Download the InfluxDB 3 Power BI connector</a>
Or use PowerShell to download:
{{% code-placeholders "YOUR_USER" %}}
{{% code-placeholders "YOUR\_USER" %}}
```powershell
# Download the connector
Invoke-WebRequest -Uri "https://docs.influxdata.com/downloads/InfluxDB.pqx" `
-OutFile "C:\Users\YOUR_USER\Downloads\InfluxDB.pqx"
```
{{% /code-placeholders %}}
Replace the following:
- {{% code-placeholder-key %}}`YOUR_USER`{{% /code-placeholder-key %}}: Your Windows username
#### Install the connector
Move the `.pqx` connector file to the Power BI custom connectors directory:
### Move the connector to the custom connectors directory
1. Create the custom connectors folder if it doesn't exist:
@ -96,11 +172,13 @@ Move the `.pqx` connector file to the Power BI custom connectors directory:
2. Move the connector file to the custom connectors folder:
{{% code-placeholders "YOUR_USER" %}}
{{% code-placeholders "YOUR\_USER" %}}
```powershell
Move-Item "C:\Users\YOUR_USER\Downloads\InfluxDB.pqx" `
"$env:USERPROFILE\Documents\Power BI Desktop\Custom Connectors\"
```
{{% /code-placeholders %}}
Replace the following:
@ -119,8 +197,10 @@ To use custom connectors, you must adjust Power BI Desktop's security settings:
5. Click **OK**
6. **Restart Power BI Desktop** for the changes to take effect
> [!Warning]
> \[!Warning]
>
> #### Security considerations
>
> Enabling uncertified extensions allows any custom connector to load.
> Only enable this setting if you trust the connectors you're installing.
@ -129,9 +209,13 @@ To use custom connectors, you must adjust Power BI Desktop's security settings:
After installing the connector and restarting Power BI Desktop:
1. Open **Power BI Desktop**
2. Click **Get Data** > **More**
3. Search for **InfluxDB 3** and select it
4. Click **Connect**
5. In the **InfluxDB 3** connection dialog, configure the following:
- **Server**: Your {{% product-name %}} URL without the port, (for example,
@ -141,18 +225,25 @@ After installing the connector and restarting Power BI Desktop:
- **Native Query** (optional): Enter a SQL query to limit the data loaded
6. Select **DirectQuery** as the **Data Connectivity mode**
7. Click **OK**
8. When prompted for credentials:
- Select **Basic** authentication
- **Username**: Leave blank or enter any value
- **Password**: Enter your {{% show-in "cloud-dedicated, clustered" %}}{{% token-link "database" %}}{{% /show-in %}}{{% show-in "cloud-serverless" %}}{{% token-link %}}{{% /show-in %}}{{% show-in "core, enterprise" %}}{{% token-link "admin" "database" %}}{{% /show-in %}}{{% show-in "enterprise" %}} with query permissions for the target database{{% /show-in %}}
9. Click **Connect**
10. Preview your data and click **Load**
> [!Important]
> \[!Important]
>
> #### Limit query size for optimal performance
>
> {{% product-name %}} can handle high throughput and dimensional data.
> To ensure Power BI can successfully process data, limit query size by:
>
> - Using a `LIMIT` clause
> - Specifying time ranges with `WHERE time >= ...`
> - Filtering by specific columns or tags
@ -165,6 +256,7 @@ When connecting to InfluxDB 3, you can use the **Native Query** option to
execute custom SQL queries:
1. In the connection dialog, enable **Native Query**
2. Enter your query in the provided field:
```sql
@ -182,6 +274,7 @@ execute custom SQL queries:
```
3. Select **DirectQuery** as the connectivity mode
4. Click **OK** to load the data
### Create visualizations
@ -223,6 +316,42 @@ After loading data, Power BI displays your dataset in the **Fields** pane.
## Troubleshooting
### Driver not found
If Power BI or other applications can't find the Arrow Flight SQL ODBC driver:
{{< tabs-wrapper >}}
{{% tabs %}}
[Windows](#)
[macOS and Linux](#)
{{% /tabs %}}
{{% tab-content %}}
1. Open **ODBC Data Source Administrator (64-bit)**
2. Navigate to the **Drivers** tab
3. Verify **Arrow Flight SQL ODBC Driver** appears in the list
4. If not listed, reinstall the driver
{{% /tab-content %}}
{{% tab-content %}}
1. Run the following command to list installed drivers:
```bash
odbcinst -q -d
```
2. Verify **Arrow Flight SQL** appears in the output
3. Check `/etc/odbcinst.ini` for proper driver configuration
4. Ensure the driver library path is correct
{{% /tab-content %}}
{{< /tabs-wrapper >}}
### Connector not found
If Power BI Desktop doesn't show the InfluxDB 3 connector:
@ -236,28 +365,41 @@ If Power BI Desktop doesn't show the InfluxDB 3 connector:
If you encounter connection errors:
- Verify your {{% product-name %}} instance is accessible
- Check that the host URL and port are correct
- Verify your {{% product-name %}} instance is running and accessible
- Check that the host URL and port are correct:
- Local instances typically use `http://localhost:8181`
- {{% show-in "cloud-serverless,cloud-dedicated" %}}{{% product-name %}} instances use cluster-specific URLs{{% /show-in %}}
- {{% show-in "cloud-serverless,cloud-dedicated" %}}{{% product-name %}} instances use cluster-specific URLs with port `443`{{% /show-in %}}
- Ensure `UseEncryption` is configured correctly for your connection type
- Verify network connectivity and firewall rules allow connections on the specified port
- Ensure your token has query permissions for the specified database
- Verify firewall rules allow connections on the specified port
### Authentication errors
If authentication fails:
- Verify your database token is valid and not expired
- {{% show-in "enterprise" %}}Ensure the token has permissions for the target database{{% /show-in %}}
- Check that you entered the token in the **Password** field
- Ensure the token is specified correctly (in the **Password** field for Power BI)
- {{% show-in "enterprise" %}}Verify the token has query permissions for the target database{{% /show-in %}}
- Check that the token was copied correctly without extra spaces or characters
- Leave the **Username** field blank or enter any value
### Query errors
If queries fail or return errors:
- Verify SQL syntax is correct for InfluxDB SQL
- Check that referenced tables (measurements) exist in the database
- Ensure column names match your schema
- Review the [SQL reference](/influxdb3/version/reference/sql/) for supported features
- For large result sets, consider adding `LIMIT` clauses
### Query performance
For better query performance:
- Always use `WHERE` clauses to filter data before loading
- Include time range filters to limit the data scanned
- Include time range filters (for example, `WHERE time >= now() - INTERVAL '7 days'`) to limit the data scanned
- Select only the columns you need
- Use the `LIMIT` clause to restrict result size
- Consider using **DirectQuery** mode instead of **Import** for large datasets
- Monitor query execution for optimization opportunities

View File

@ -0,0 +1,402 @@
/// <reference types="cypress" />
/**
* Ask AI Widget E2E Test Suite
*
* Tests for the Kapa.ai Ask AI widget and ask-ai-link shortcode
*
* NOTE: Open the chat window sparingly.
*
* COMPREHENSIVE TEST SCENARIOS CHECKLIST:
*
* Widget Initialization:
* ----------------------
* - [x] Widget script loads without errors
* - [x] window.Kapa object is available
* - [x] Widget trigger button is visible
* - [ ] Widget initializes with correct configuration
* - [ ] No JavaScript console errors during initialization
*
* Widget Trigger Button:
* ----------------------
* - [x] Button exists in footer
* - [x] Button has correct class (ask-ai-open)
* - [x] Button opens widget when clicked
* - [x] Widget modal becomes visible after click
* - [ ] Widget overlay appears (if configured)
*
* Ask AI Link Shortcode:
* ----------------------
* - [x] Link renders correctly in content
* - [x] Link has correct text (default or custom)
* - [x] Link has ask-ai-open class
* - [x] Link has onclick handler for analytics
* - [x] Link has data-query attribute with query
* - [x] Link includes gtag analytics in onclick
* - [x] Link opens widget when clicked
* - [x] Query is pre-filled without auto-submitting
* - [x] Widget modal becomes visible after click
* - [x] Widget overlay appears (if configured)
*
* Widget Functionality:
* ---------------------
* - [ ] Widget opens in modal/drawer
* - [ ] Widget shows input field
* - [ ] Widget shows example questions
* - [ ] Widget accepts user input
* - [ ] Widget submits queries to AI
* - [ ] Widget displays AI responses
* - [ ] Widget can be closed
* - [ ] Widget reopens with history preserved
*
* Query Pre-population:
* ---------------------
* - [x] window.Kapa.open() accepts query parameter
* - [x] Query appears in input field when pre-populated
* - [x] Query is submitted automatically with submit: true
* - [ ] Pre-populated query respects special characters
* - [ ] Pre-populated query handles HTML entities correctly
*
* Analytics Tracking:
* -------------------
* - [ ] Link click fires gtag event
* - [ ] Event includes correct custom_map fields
* - [ ] Event includes query text
* - [ ] Event includes section (pathname)
* - [ ] Event includes interaction_type: 'inline_link'
*
* Error Handling:
* ---------------
* - [x] No console errors when widget loads
* - [ ] Graceful handling if window.Kapa is undefined
* - [ ] Graceful handling if widget script fails to load
* - [ ] Error messages are user-friendly
*
* Accessibility:
* --------------
* - [ ] Widget trigger button is keyboard accessible
* - [ ] Ask AI links are keyboard accessible
* - [ ] Widget modal has proper focus management
* - [ ] Widget has ARIA labels
* - [ ] Screen reader announcements work
*
* Cross-browser:
* --------------
* - [ ] Works in Chrome
* - [ ] Works in Firefox
* - [ ] Works in Safari
* - [ ] Works in Edge
*/
function beforeTest() {
cy.viewport(1440, 900);
}
describe('Ask AI Widget and Link', function () {
describe('Widget Initialization', function () {
beforeEach(() => {
cy.visit('/influxdb3/core/admin/identify-version/');
beforeTest();
});
it('should load widget script without JavaScript errors', function () {
cy.window().then((win) => {
const errors = [];
const originalError = win.console.error;
win.console.error = (...args) => {
errors.push(args.join(' '));
originalError.apply(win.console, args);
};
// Wait for widget to initialize
cy.wait(2000);
cy.then(() => {
// Filter for Kapa-related errors
const kapaErrors = errors.filter(
(log) =>
log.includes('kapa') ||
log.includes('Kapa') ||
log.includes('ask-ai')
);
expect(kapaErrors).to.have.length(0);
});
});
});
it('should make window.Kapa available', function () {
cy.window().should('have.property', 'Kapa');
cy.window().then((win) => {
expect(win.Kapa).to.be.a('function');
});
});
it('should render widget trigger button in footer', function () {
cy.get('.ask-ai-trigger a.ask-ai-open').should('be.visible');
cy.get('.ask-ai-trigger').should('contain', 'Ask AI');
});
it('should have correct class for widget trigger', function () {
cy.get('.ask-ai-trigger a.ask-ai-open')
.should('have.class', 'ask-ai-open')
.and('be.visible');
});
});
describe('Widget Trigger Button', function () {
// ONLY test that opens widget via button - combines all button functionality tests
it('should open widget when trigger button is clicked', function () {
cy.visit('/influxdb3/core/admin/identify-version/');
beforeTest();
// Click the Ask AI button
cy.get('.ask-ai-trigger a.ask-ai-open').click();
// Wait for widget modal to appear
cy.get('#kapa-modal-content', {
includeShadowDom: true,
timeout: 1000,
}).should('be.visible');
});
});
describe('Ask AI Link Shortcode', function () {
beforeEach(() => {
cy.visit('/influxdb3/core/admin/identify-version/');
beforeTest();
});
it('should render ask-ai-link with correct attributes', function () {
// Validate DOM without clicking
cy.get('a.ask-ai-open')
.contains('Ask InfluxData AI')
.should('be.visible')
.should('have.class', 'ask-ai-open')
.should(
'have.attr',
'data-query',
'Help determine my InfluxDB version based on licensing, hosting, server age, and API.'
);
});
// This is the only test that opens the widget modal
it('should open widget with pre-filled query when ask-ai-link is clicked', function () {
cy.get('.article--content a.ask-ai-open')
.contains('Ask InfluxData AI')
.as('askAILink');
cy.get('@askAILink').click();
// Widget container MUST become visible
cy.get('#kapa-modal-content', { includeShadowDom: true, timeout: 1000 })
.should('be.visible', 'Widget must open when ask-ai-link is clicked')
// Verify query is pre-filled (validates pre-fill behavior)
.find('textarea, input[type="text"]')
.should(
'have.value',
'Help determine my InfluxDB version based on licensing, hosting, server age, and API.'
);
});
});
describe('Error Handling', function () {
beforeEach(() => {
cy.visit('/influxdb3/core/admin/identify-version/');
beforeTest();
});
it('should not throw console errors when link is clicked', function () {
cy.window().then((win) => {
const errors = [];
const originalError = win.console.error;
win.console.error = (...args) => {
errors.push(args.join(' '));
originalError.apply(win.console, args);
};
// Validate without actually clicking (DOM interaction only)
cy.get('a.ask-ai-open').contains('Ask InfluxData AI');
cy.wait(500);
cy.then(() => {
// Check for Kapa-related errors
const kapaErrors = errors.filter(
(log) =>
(log.includes('kapa') || log.includes('Kapa')) &&
!log.includes('Unknown method')
);
expect(kapaErrors).to.have.length(0);
});
});
});
it('should handle missing window.Kapa gracefully', function () {
cy.window().then((win) => {
// Temporarily remove Kapa
const originalKapa = win.Kapa;
delete win.Kapa;
// Validate link without opening widget
cy.get('a.ask-ai-open')
.contains('Ask InfluxData AI')
.should('have.attr', 'onclick');
// Restore Kapa
win.Kapa = originalKapa;
});
});
});
describe('Ask AI Widget Configuration', function () {
describe('Input Placeholder', function () {
it('should have the version name in the placeholder on v3 pages', function () {
cy.visit('/influxdb3/core/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const placeholder = $script.attr(
'data-modal-ask-ai-input-placeholder'
);
expect(placeholder).to.contain(
'Specify your version and product')
.and.to.contain("Core");
});
});
it('should have the version name in the placeholder on v2 pages', function () {
cy.visit('/influxdb/v2/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const placeholder = $script.attr(
'data-modal-ask-ai-input-placeholder'
);
expect(placeholder).to.contain(
'Specify your version and product')
.and.to.contain("v2");
});
});
it('should have the version name in the placeholder on v1 pages', function () {
cy.visit('/influxdb/v1/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const placeholder = $script.attr(
'data-modal-ask-ai-input-placeholder'
);
expect(placeholder).to.contain(
'Specify your version and product')
.and.to.contain("v1");
});
});
it('should have default placeholder when no product-specific one exists', function () {
cy.visit('/platform/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const placeholder = $script.attr(
'data-modal-ask-ai-input-placeholder'
);
expect(placeholder).to.include('Ask questions about InfluxDB');
expect(placeholder).to.include('Specify your product and version');
});
});
});
describe('InfluxDB 3 Products', function () {
it('should configure Explorer-specific questions in Kapa widget', function () {
cy.visit('/influxdb3/explorer/');
beforeTest();
// Check the Kapa widget script tag has correct data-modal-example-questions attribute
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
expect(questions).to.include('visualize data using Explorer');
});
});
it('should configure Core-specific questions in Kapa widget', function () {
cy.visit('/influxdb3/core/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
expect(questions).to.include(
'Python Processing engine using InfluxDB 3 Core'
);
// Should NOT have read replica question
expect(questions).to.not.include('replica');
});
});
it('should configure Enterprise-specific questions in Kapa widget', function () {
cy.visit('/influxdb3/enterprise/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
expect(questions).to.include('install and run InfluxDB 3 Enterprise');
});
});
});
describe('InfluxDB v1 Products', function () {
it('should configure Enterprise v1-specific questions in Kapa widget', function () {
cy.visit('/enterprise_influxdb/v1/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
expect(questions).to.include('configure InfluxDB Enterprise v1');
});
});
});
describe('InfluxDB OSS v2', function () {
it('should configure v2-specific questions with version name in Kapa widget', function () {
cy.visit('/influxdb/v2/get-started/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
// Check for v2-specific questions
expect(questions).to.include(
'write and query data using InfluxDB OSS v2'
);
// Should NOT have v1-specific questions
expect(questions).to.not.include('retention policies');
});
});
});
describe('InfluxDB OSS v1', function () {
it('should configure v1-specific questions with version name in Kapa widget', function () {
cy.visit('/influxdb/v1/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
// Check for v1-specific questions
expect(questions).to.include(
'query data with InfluxQL using InfluxDB OSS v1'
);
// Should NOT have v2-specific questions
expect(questions).to.not.include('auth tokens');
});
});
});
describe('InfluxDB Cloud (TSM)', function () {
it('should configure Cloud-specific questions with correct naming in Kapa widget', function () {
cy.visit('/influxdb/cloud/');
beforeTest();
cy.get('script[src*="kapa-widget.bundle.js"]').should(($script) => {
const questions = $script.attr('data-modal-example-questions');
// Check for Cloud-specific questions
expect(questions).to.include(
'write and query data using InfluxDB Cloud (TSM)'
);
});
});
});
});
});

View File

@ -0,0 +1,114 @@
/// <reference types="cypress" />
/**
* Page Context E2E Test Suite
* Tests that all products in products.yml are correctly mapped in page-context.js
*/
describe('Page Context - Product Mapping', function () {
describe('InfluxDB 3 Products', function () {
it('should map Explorer pages correctly', function () {
cy.visit('/influxdb3/explorer/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb3/explorer/');
cy.get('h1').should('contain', 'InfluxDB 3 Explorer');
});
it('should map Core pages correctly', function () {
cy.visit('/influxdb3/core/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb3/core/');
cy.get('h1').should('contain', 'InfluxDB 3 Core');
});
it('should map Enterprise pages correctly', function () {
cy.visit('/influxdb3/enterprise/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb3/enterprise/');
cy.get('h1').should('contain', 'InfluxDB 3 Enterprise');
});
it('should map Cloud Serverless pages correctly', function () {
cy.visit('/influxdb3/cloud-serverless/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb3/cloud-serverless/');
cy.get('h1').should('contain', 'InfluxDB Cloud Serverless');
});
it('should map Cloud Dedicated pages correctly', function () {
cy.visit('/influxdb3/cloud-dedicated/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb3/cloud-dedicated/');
cy.get('h1').should('contain', 'InfluxDB Cloud Dedicated');
});
it('should map Clustered pages correctly', function () {
cy.visit('/influxdb3/clustered/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb3/clustered/');
cy.get('h1').should('contain', 'InfluxDB Clustered');
});
});
describe('InfluxDB v2 and Cloud Products', function () {
it('should map InfluxDB v2 pages correctly', function () {
cy.visit('/influxdb/v2/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb/v2/');
cy.get('h1').should('contain', 'InfluxDB v2');
});
it('should map InfluxDB Cloud (TSM) pages correctly', function () {
cy.visit('/influxdb/cloud/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb/cloud/');
cy.get('h1').should('contain', 'InfluxDB Cloud');
});
});
describe('InfluxDB v1 Products', function () {
it('should map InfluxDB v1 pages correctly', function () {
cy.visit('/influxdb/v1/');
cy.get('body').should('be.visible');
cy.url().should('include', '/influxdb/v1/');
cy.get('h1').should('contain', 'InfluxDB OSS');
});
it('should map Enterprise v1 pages correctly', function () {
cy.visit('/enterprise_influxdb/v1/');
cy.get('body').should('be.visible');
cy.url().should('include', '/enterprise_influxdb/v1/');
cy.get('h1').should('contain', 'InfluxDB Enterprise');
});
});
describe('Other Products', function () {
it('should map Telegraf pages correctly', function () {
cy.visit('/telegraf/v1/');
cy.get('body').should('be.visible');
cy.url().should('include', '/telegraf/v1/');
cy.get('h1').should('contain', 'Telegraf');
});
it('should map Chronograf pages correctly', function () {
cy.visit('/chronograf/v1/');
cy.get('body').should('be.visible');
cy.url().should('include', '/chronograf/v1/');
cy.get('h1').should('contain', 'Chronograf');
});
it('should map Kapacitor pages correctly', function () {
cy.visit('/kapacitor/v1/');
cy.get('body').should('be.visible');
cy.url().should('include', '/kapacitor/v1/');
cy.get('h1').should('contain', 'Kapacitor');
});
it('should map Flux pages correctly', function () {
cy.visit('/flux/v0/');
cy.get('body').should('be.visible');
cy.url().should('include', '/flux/v0/');
cy.get('h1').should('contain', 'Flux');
});
});
});

View File

@ -23,9 +23,11 @@ influxdb3_core:
x-influxdb-build: 'Core'
url_contains: ['localhost:8181']
ai_sample_questions:
- What's my InfluxDB version?
- How do I install and run InfluxDB 3 Core?
- How do I write a plugin for the Python Processing engine?
- How do I write data using the HTTP API for InfluxDB 3 Core?
- Help me write a plugin for the Python Processing engine using InfluxDB 3 Core
ai_input_placeholder: "Specify your version and product (\"Core\", \"InfluxDB 3 Enterprise\", \"OSS v1\") for better results"
ai_source_group_ids: "b650cf0b-4b52-42e8-bde7-a02738f27262"
influxdb3_enterprise:
name: InfluxDB 3 Enterprise
@ -52,9 +54,11 @@ influxdb3_enterprise:
x-influxdb-build: 'Enterprise'
url_contains: ['localhost:8181']
ai_sample_questions:
- What's my InfluxDB version?
- How do I install and run InfluxDB 3 Enterprise?
- Help me write a plugin for the Python Processing engine?
- How do I start a read replica node with InfluxDB 3 Enterprise?
- How do I start a read replica node using InfluxDB 3 Enterprise?
ai_input_placeholder: "Specify your version and product (\"InfluxDB 3 Enterprise\", \"Core\", \"Enterprise v1\") for better results"
ai_source_group_ids: "b650cf0b-4b52-42e8-bde7-a02738f27262"
influxdb3_explorer:
name: InfluxDB 3 Explorer
@ -66,9 +70,11 @@ influxdb3_explorer:
latest_patch: 1.4.0
placeholder_host: localhost:8888
ai_sample_questions:
- How do I query data using InfluxDB 3 Explorer?
- How do I use InfluxDB 3 Explorer to visualize data?
- How do I install InfluxDB 3 Explorer?
- How do I install and run Explorer?
- How do I query data using Explorer?
- How do I visualize data using Explorer?
ai_input_placeholder: "Specify your version and product (\"InfluxDB 3 Explorer and Enterprise\", \"InfluxDB 3 Explorer and Core\") for better results"
ai_source_group_ids: "b650cf0b-4b52-42e8-bde7-a02738f27262"
influxdb3_cloud_serverless:
name: InfluxDB Cloud Serverless
@ -94,8 +100,11 @@ influxdb3_cloud_serverless:
detection:
url_contains: ['us-east-1-1.aws.cloud2.influxdata.com', 'eu-central-1-1.aws.cloud2.influxdata.com']
ai_sample_questions:
- How do I migrate from InfluxDB Cloud 2 to InfluxDB Cloud Serverless?
- What's my InfluxDB version?
- How do I migrate from Cloud (TSM) to Cloud Serverless?
- What tools can I use to write data to InfluxDB Cloud Serverless?
ai_input_placeholder: "Specify your version and product (\"InfluxDB Cloud Serverless\", \"InfluxDB 3 Enterprise\", \"Core\") for better results"
ai_source_group_ids: "b650cf0b-4b52-42e8-bde7-a02738f27262"
influxdb3_cloud_dedicated:
name: InfluxDB Cloud Dedicated
@ -120,9 +129,11 @@ influxdb3_cloud_dedicated:
detection:
url_contains: ['influxdb.io']
ai_sample_questions:
- How do I migrate from InfluxDB v1 to InfluxDB Cloud Dedicated?
- What tools can I use to write data to Cloud Dedicated?
- How do I use SQL and parameterized queries with Cloud Dedicated?
- What's my InfluxDB version?
- How do I migrate from InfluxDB v1 to Cloud Dedicated?
- How do I use SQL and parameterized queries with InfluxDB Cloud Dedicated?
ai_input_placeholder: "Specify your version and product (\"InfluxDB Cloud Dedicated\", \"InfluxDB 3 Enterprise\", \"Core\") for better results"
ai_source_group_ids: "b650cf0b-4b52-42e8-bde7-a02738f27262"
influxdb3_clustered:
name: InfluxDB Clustered
@ -147,12 +158,16 @@ influxdb3_clustered:
ping_headers:
x-influxdb-version: 'influxqlbridged-development'
ai_sample_questions:
- How do I use a Helm chart to configure Clustered?
- What tools can I use to write data to Clustered?
- What's my InfluxDB version?
- How do I use a Helm chart to configure InfluxDB Clustered?
- How do I use SQL and parameterized queries with InfluxDB Clustered?
ai_input_placeholder: "Specify your version and product (\"InfluxDB Clustered\", \"InfluxDB 3 Enterprise\", \"Core\") for better results"
ai_source_group_ids: "b650cf0b-4b52-42e8-bde7-a02738f27262"
influxdb:
name: InfluxDB
name__v2: InfluxDB OSS v2
name__v1: InfluxDB OSS v1
altname: InfluxDB OSS
namespace: influxdb
succeeded_by: influxdb3_core
@ -183,12 +198,20 @@ influxdb:
x-influxdb-version: '^(1|2)\.'
url_contains: ['localhost:8086']
ai_sample_questions:
- How do I write and query data with InfluxDB v2 OSS?
- How can I migrate from InfluxDB v2 OSS to InfluxDB 3 Core?
- How do I manage auth tokens in InfluxDB v2 OSS?
- What's my InfluxDB version?
- How do I write and query data using InfluxDB OSS v2?
- How can I migrate from InfluxDB OSS v2 to InfluxDB 3?
ai_input_placeholder: "Specify your version and product (\"InfluxDB OSS v2\", \"InfluxDB v1\", \"InfluxDB 3 Core\") for better results"
ai_source_group_ids: "3e905caa-dd6f-464b-abf9-c3880e09f128"
ai_sample_questions__v1:
- What's my InfluxDB version?
- How do I query data with InfluxQL using InfluxDB OSS v1?
- How do I set up continuous queries in InfluxDB OSS v1?
ai_source_group_ids__v1: "d809f67b-867d-4f17-95f0-c33dbadbf15f"
influxdb_cloud:
name: InfluxDB Cloud (TSM)
name__vcloud: InfluxDB Cloud (TSM)
altname: InfluxDB Cloud
namespace: influxdb
menu_category: managed
@ -208,9 +231,11 @@ influxdb_cloud:
detection:
url_contains: ['us-west-2-1.aws.cloud2.influxdata.com', 'us-west-2-2.aws.cloud2.influxdata.com', 'us-east-1-1.aws.cloud2.influxdata.com', 'eu-central-1-1.aws.cloud2.influxdata.com', 'us-central1-1.gcp.cloud2.influxdata.com', 'westeurope-1.azure.cloud2.influxdata.com', 'eastus-1.azure.cloud2.influxdata.com']
ai_sample_questions:
- How do I write and query data with InfluxDB Cloud 2?
- How is Cloud 2 different from Cloud Serverless?
- How do I manage auth tokens in InfluxDB Cloud 2?
- What's my InfluxDB version?
- How do I write and query data using InfluxDB Cloud (TSM)?
- How is Cloud (TSM) different from Cloud Serverless?
ai_input_placeholder: "Specify your version and product (\"InfluxDB Cloud (TSM)\", \"InfluxDB 3 Enterprise\", \"Core\") for better results"
ai_source_group_ids: "3e905caa-dd6f-464b-abf9-c3880e09f128"
telegraf:
name: Telegraf
@ -222,9 +247,10 @@ telegraf:
latest_patches:
v1: 1.36.4
ai_sample_questions:
- How do I install and configure Telegraf?
- How do I configure Telegraf for InfluxDB 3?
- How do I write a custom Telegraf plugin?
- How do I use Telegraf for MQTT?
ai_input_placeholder: "Ask questions about Telegraf and InfluxDB"
chronograf:
name: Chronograf
@ -239,6 +265,7 @@ chronograf:
- How do I configure Chronograf for InfluxDB v1?
- How do I create a dashboard in Chronograf?
- How do I use Grafana to visualize data stored in InfluxDB 3?
ai_input_placeholder: "Ask questions about Chronograf and InfluxDB"
kapacitor:
name: Kapacitor
@ -251,8 +278,9 @@ kapacitor:
v1: 1.8.2
ai_sample_questions:
- How do I configure Kapacitor for InfluxDB v1?
- How do I write a custom Kapacitor task?
- How do I write a custom task for Kapacitor?
- How do I create tasks using InfluxDB 3 Core?
ai_input_placeholder: "Ask questions about Kapacitor"
enterprise_influxdb:
name: "InfluxDB Enterprise v1"
@ -276,9 +304,11 @@ enterprise_influxdb:
ping_headers:
x-influxdb-build: 'Enterprise'
ai_sample_questions:
- How can I configure my InfluxDB v1 Enterprise server?
- How do I replicate data between InfluxDB v1 Enterprise and OSS?
- How do I query data stored in InfluxDB v1?
- What's my InfluxDB version?
- How can I configure InfluxDB Enterprise v1?
- How do I replicate data from OSS to InfluxDB Enterprise v1?
ai_input_placeholder: "Specify your version and product (\"Enterprise v1\", \"InfluxDB 3 Enterprise\", \"Core\") for better results"
ai_source_group_ids: "d809f67b-867d-4f17-95f0-c33dbadbf15f"
flux:
name: Flux
@ -288,6 +318,8 @@ flux:
versions: [v0]
latest: v0.x
ai_sample_questions:
- How do I write a Flux query for InfluxDB v2 (TSM)?
- How do I use Flux to transform data stored in InfluxDB v2?
- How do I query with Flux?
- How do I transform data with Flux?
- How do I join data with Flux?
ai_input_placeholder: "Ask questions about Flux and InfluxDB"
ai_source_group_ids: "d809f67b-867d-4f17-95f0-c33dbadbf15f,3e905caa-dd6f-464b-abf9-c3880e09f128"

View File

@ -1,7 +1,7 @@
<div class="article">
<article class="article--content">
<div class="title">
<h1>{{ .Title | .RenderString }}</h1>
<h1>{{ .RenderString .Title }}</h1>
{{ partial "article/supported-versions.html" . }}
{{ partial "article/page-meta.html" . }}
</div>

View File

@ -1,3 +1,12 @@
{{- if .Params.prepend -}}
{{ .Params.prepend | .RenderString }}
{{- if reflect.IsMap .Params.prepend -}}
{{- if .Params.prepend.title -}}
<h2>{{ .Params.prepend.title }}</h2>
{{- end -}}
{{- if .Params.prepend.content -}}
{{ .RenderString .Params.prepend.content }}
{{- end -}}
{{- else -}}
{{ .RenderString .Params.prepend }}
{{- end -}}
{{- end -}}

View File

@ -0,0 +1,17 @@
{{- $linkText := .Get "link-text" | default "Ask Docs AI" -}}
{{- $query := .Get "query" | default "" -}}
<a href="#"
class="ask-ai-open"
{{- if $query -}}
data-query="{{ $query }}"
{{- end -}}
onclick="
if (window.gtag) {
window.gtag('event', 'ask_ai_link', {
'custom_map.interaction_type': 'inline_link',
'custom_map.section': location.pathname,
'custom_map.query': '{{ $query | htmlEscape }}'
});
}
return false;
">{{ $linkText }}</a>

View File

@ -14,7 +14,7 @@
{{ $context := .Get "context" }}
{{ $aiInstruction := .Get "ai_instruction" }}
<h4>Identify your InfluxDB version</h4>
<h4 id="identify-your-influxdb-version">Identify your InfluxDB version</h4>
<p>
If you are unsure which InfluxDB product you are using, use our interactive version detector to help identify it:</p>

View File

@ -1131,9 +1131,9 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001737:
version "1.0.30001745"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz"
integrity sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==
version "1.0.30001754"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz"
integrity sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==
careful-downloader@^3.0.0:
version "3.0.0"