Ask AI group filters (#6529)

* feat(askai): add Kapa.ai source group filtering for InfluxDB v3

- Add ai_source_group_ids field to all InfluxDB v3 products in data/products.yml
- Add getProductSourceGroupIds() function to retrieve source group IDs from product data
- Enables filtered AI responses using Kapa source groups for documentation pages
- Follows existing pattern for dynamic product configuration
- Implement version-specific config support (__v1, __v2 suffixes)
- Append version hints to example questions for InfluxDB database products only
- Make example questions generic (remove product-specific names)
- Tools (Telegraf, Chronograf, Kapacitor, Flux, Explorer) display questions without version hints
- Pre-fills chat input with [version: /path/] for InfluxDB database products
- Users can easily edit or remove the pre-filled text
- Works for manual opens (Cmd+K) and programmatic opens
- Converts module to TypeScript

* refactor(ask-ai): change version format to 'My version: <product name>'

Use human-readable product names instead of URL paths for better UX.
Example: 'My version: InfluxDB 3 Core' instead of '[version: /influxdb3/core/]'

* fix(ask-ai): restore working Kapa.open() pre-fill implementation

- Replace textarea detection with direct Kapa.open() call
- Add Kapa preinitialization code
- Use click handler on .ask-ai-open button with capture phase
- Handle conversation reset event to re-fill version context
- Remove console logging for cleaner production code

* fix(ask-ai): remove parentheses from example questions for consistency

Make example question format match the pre-fill format:
- Before: 'question (My version: product)'
- After: 'question My version: product'

This ensures users don't think there's a difference between the two formats.

* fix(askai): add Explorer product mapping for Ask AI widget

- Add influxdb3_explorer mapping to getCurrentProductData()
- Add explorer context to getContext() function
- Ensures Explorer pages use correct ai_sample_questions from products.yml
- Reorder Explorer questions with 'install and run' first

This fixes the issue where Explorer Ask AI widget was showing wrong
example questions by properly loading the influxdb3_explorer config.

* test(page-context): add comprehensive e2e tests for product mappings

Add Cypress tests to validate page-context.js correctly identifies:
- Product context values for all InfluxDB products
- Product data from products.yml configuration
- Version information
- AI sample questions and source group IDs
- Placeholder host values

Tests cover:
- InfluxDB 3 (Core, Enterprise, Explorer, Cloud variants, Clustered)
- InfluxDB v2 and v1
- InfluxDB Cloud (TSM)
- Tools (Telegraf, Chronograf, Kapacitor, Flux)

Validates the fix for Explorer Ask AI showing correct example questions.

Related to #jts-askai-group-filters branch work.

* feat(test): add --no-mapping flag to e2e test runner

Allow running functionality tests without requiring content file paths.
The --no-mapping flag skips content-to-URL mapping, making it easier
to run tests that don't depend on specific content files.

Usage:
  # With content mapping (for content-specific tests)
  node run-e2e-specs.js content/influxdb3/core/_index.md

  # Without content mapping (for functionality tests)
  node run-e2e-specs.js --spec cypress/e2e/page-context.cy.js --no-mapping

Benefits:
- Simplifies running functionality tests like page-context.cy.js
- Reduces test startup time by skipping unnecessary file mapping
- Makes test commands clearer about their purpose

The page-context test was updated to work correctly with this flag.

* deps: update caniuse and related hook files

* test: Add a `--no-mapping` flag to run tests without specific content files (i.e., test contains all the URLs it needs)

* chore(ask-ai): Format example questions

* test(page-context): add comprehensive e2e tests for all products in products.yml

- Expanded test suite from 6 to 27 tests covering all products
- Added tests for InfluxDB 3 products (Explorer, Core, Enterprise, Cloud Serverless, Cloud Dedicated, Clustered)
- Added tests for InfluxDB v2 and Cloud (TSM)
- Added tests for InfluxDB v1 and Enterprise v1
- Added tests for other products (Telegraf, Chronograf, Kapacitor, Flux)
- Validates page mappings in page-context.js
- Validates AI sample questions configuration in products.yml
- All 27 tests passing

* fix(page-context): correct enterprise_influxdb URL pattern matching

- Changed pattern from /enterprise_v1/ to /enterprise_influxdb/
- Fixes Ask AI example questions not showing correctly for Enterprise v1
- Pattern now matches actual URL structure /enterprise_influxdb/v1/
- All 27 e2e tests passing

* test(page-context): add UI validation for Ask AI widget configuration

- Added 4 tests checking Kapa widget script data attributes
- Tests verify data-modal-example-questions contains correct product-specific questions
- Validates Explorer, Core, Enterprise, and Enterprise v1 configurations
- All 31 tests passing (27 existing + 4 new UI tests)

* feat(ask-ai): add help in Ask AI widget placeholder

- InfluxDB placeholder recommends specifying product and version
- Fix page-context.js to use products.influxdb_cloud instead of products.cloud
- Add UI tests verifying version-specific naming in Kapa widget script tags

* feat(ask-ai): Tailors placeholder for each version/product. Disables "Viewing <product>" in disclaimer note.
jmercer/complete-plugin-sync-fix
Jason Stirnaman 2025-11-18 17:43:02 -05:00 committed by GitHub
parent 936913c3cb
commit f084fe3a31
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
32 changed files with 2520 additions and 861 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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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"