Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ Make sure that you are sending the requests over HTTPS.
1. [Schema](stream/schema)
1. [Setting](stream/setting)
1. [Ingestion](ingestion/)
1. [Bulk](ingestion/bulk)
1. [Json](ingestion/json)
1. [Multi](ingestion/multi)
1. [Bulk](ingestion/logs/bulk)
1. [Json](ingestion/logs/json)
1. [Multi](ingestion/logs/multi)
1. [Search](search/)
1. [Function](function/)
1. [User](user/)
Expand Down
2 changes: 1 addition & 1 deletion docs/api/user/add_user.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: >-
Add an existing user to an OpenObserve organization with a specified role
using a simple POST request. Supports admin and user roles.
---
# Add exiting user to org
# Add existing user to org

Endpoint: `POST /api/{organization}/users/{user_email}`

Expand Down
14 changes: 14 additions & 0 deletions docs/assets/close-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 5 additions & 5 deletions docs/assets/moon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
752 changes: 718 additions & 34 deletions docs/environment-variables.md

Large diffs are not rendered by default.

Binary file modified docs/images/enable-disable-streaming-search.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
56 changes: 56 additions & 0 deletions docs/js/search-close-minimal.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,65 @@
// Show/hide close icon based on .md-search-result__meta visibility
function isElementInViewport(el) {
if (!el) return false;
const rect = el.getBoundingClientRect();
return (
rect.top < window.innerHeight &&
rect.bottom > 0 &&
rect.left < window.innerWidth &&
rect.right > 0
);
}

function toggleCloseIconVisibility() {
const meta = document.querySelector(".md-search-result__meta");
const closeIcon = document.querySelector(".md-search__close");
if (closeIcon) {
if (isElementInViewport(meta)) {
closeIcon.style.display = "flex";
} else {
closeIcon.style.display = "none";
}
}
}

window.addEventListener("scroll", toggleCloseIconVisibility);
window.addEventListener("resize", toggleCloseIconVisibility);
document.addEventListener("DOMContentLoaded", toggleCloseIconVisibility);
// Also run after search results update
document.addEventListener("input", function (e) {
if (e.target.classList.contains("md-search__input")) {
setTimeout(toggleCloseIconVisibility, 50);
}
});
/**
* Minimal Search Close Functionality
* Adds click handler to the close icon in the search input
*/

document.addEventListener("DOMContentLoaded", function () {
// Inject clear button if not present
const searchInput = document.querySelector(".md-search__input");
if (searchInput && !document.querySelector(".md-search__clear")) {
const clearBtn = document.createElement("button");
clearBtn.className = "md-search__clear";
clearBtn.type = "button";
clearBtn.textContent = "Clear";
searchInput.parentNode.insertBefore(clearBtn, searchInput.nextSibling);

clearBtn.addEventListener("click", function () {
searchInput.value = "";
searchInput.dispatchEvent(new Event("input", { bubbles: true }));
searchInput.focus();
clearBtn.style.display = "none";
});

searchInput.addEventListener("input", function () {
clearBtn.style.display = searchInput.value ? "inline" : "none";
});

// Initial state
clearBtn.style.display = searchInput.value ? "inline" : "none";
}
// Add click handler to search input when close icon area is clicked
document.addEventListener("click", function (e) {
const searchInput = document.querySelector(".md-search__input");
Expand Down
92 changes: 92 additions & 0 deletions docs/js/toc-highlight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/**
* Simple TOC scroll-based highlighting
* Highlights current section in purple text
*/

(function () {
"use strict";

let tocLinks = [];
let headings = [];

function init() {
// Find TOC links
tocLinks = Array.from(
document.querySelectorAll(".md-nav--secondary .md-nav__link")
);
if (tocLinks.length === 0) return;

// Find corresponding headings
headings = tocLinks
.map((link) => {
const href = link.getAttribute("href");
return href && href.startsWith("#")
? document.getElementById(href.substring(1))
: null;
})
.filter((h) => h !== null);

if (headings.length === 0) return;

// Listen to scroll
window.addEventListener("scroll", updateHighlight, { passive: true });
updateHighlight();
}

function updateHighlight() {
const scrollTop = window.pageYOffset;
const windowHeight = window.innerHeight;
const documentHeight = document.documentElement.scrollHeight;

// If near bottom, highlight last item
if (scrollTop + windowHeight >= documentHeight - 50) {
setActive(tocLinks.length - 1);
return;
}

// Find current section
let activeIndex = -1;
for (let i = headings.length - 1; i >= 0; i--) {
if (headings[i] && headings[i].getBoundingClientRect().top <= 80) {
activeIndex = i;
break;
}
}

setActive(activeIndex);
}

function setActive(index) {
// Remove all active classes
tocLinks.forEach((link) => {
link.classList.remove("md-nav__link--active", "is-active");
});

// Add active class to current item and scroll into view if needed
if (index >= 0 && index < tocLinks.length) {
const activeLink = tocLinks[index];
activeLink.classList.add("md-nav__link--active", "is-active");
// Scroll the active link into view within the sidebar
// Only if not already fully visible
if (typeof activeLink.scrollIntoView === "function") {
activeLink.scrollIntoView({ block: "nearest", behavior: "smooth" });
}
}
}

// Initialize when ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
} else {
init();
}

// Re-initialize on page changes
let currentUrl = location.href;
new MutationObserver(() => {
if (location.href !== currentUrl) {
currentUrl = location.href;
setTimeout(init, 100);
}
}).observe(document, { childList: true, subtree: true });
})();
8 changes: 6 additions & 2 deletions docs/operator-guide/etcd.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
---
title: Etcd Maintenance
title: Etcd Maintenance (Deprecated)
weight: 4450
description: >-
Learn how to maintain your etcd cluster with compaction, defragmentation, and
space quotas to prevent data loss and ensure reliable performance.
---

# Etcd Maintenance
# Etcd Maintenance (Deprecated)

!!! warning "Deprecation Notice"
Support for **etcd** has been deprecated in OpenObserve.


## Overview

Expand Down
2 changes: 1 addition & 1 deletion docs/operator-guide/etcd_restore.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: >-
Restore a broken etcd cluster in OpenObserve by restarting pods, resetting
data, and rejoining members using CLI and updated Helm configs.
---
# Etcd Cluster Restore
# Etcd Cluster Restore (Deprecated)

Many users ran into the case only one of the 3 pods of etcd cluster can works. The other 2 pods always restart and can't back to work.

Expand Down
Loading