This is an automated email from the ASF dual-hosted git repository.

jeffreyh pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/doris-opentelemetry-demo.git


The following commit(s) were added to refs/heads/dev by this push:
     new 27d84a0  feat: release doris-app 1.0.1-alpha.2
27d84a0 is described below

commit 27d84a09b236a86b95c373cef9cdd98e4019127b
Author: Jeffrey <[email protected]>
AuthorDate: Wed Feb 4 19:16:25 2026 +0800

    feat: release doris-app 1.0.1-alpha.2
---
 src/grafana/plugins/doris-app/382.js        | 117 +++-
 src/grafana/plugins/doris-app/382.js.map    |   6 +-
 src/grafana/plugins/doris-app/42.js         |  11 +-
 src/grafana/plugins/doris-app/42.js.map     |   6 +-
 src/grafana/plugins/doris-app/439.js        |  29 +-
 src/grafana/plugins/doris-app/439.js.map    |   6 +-
 src/grafana/plugins/doris-app/659.js        | 917 ++++++++++++++++++++++++++++
 src/grafana/plugins/doris-app/659.js.map    |   1 +
 src/grafana/plugins/doris-app/824.js        |  12 +-
 src/grafana/plugins/doris-app/824.js.map    |   6 +-
 src/grafana/plugins/doris-app/CHANGELOG.md  |   9 +
 src/grafana/plugins/doris-app/module.js     |   8 +
 src/grafana/plugins/doris-app/module.js.map |   6 +-
 src/grafana/plugins/doris-app/plugin.json   |   7 +-
 14 files changed, 1107 insertions(+), 34 deletions(-)

diff --git a/src/grafana/plugins/doris-app/382.js 
b/src/grafana/plugins/doris-app/382.js
index 3b08889..fe79ebc 100644
--- a/src/grafana/plugins/doris-app/382.js
+++ b/src/grafana/plugins/doris-app/382.js
@@ -176,6 +176,7 @@ function FilterContent({ onHide, dataFilterValue }) {
     const [dataFilter, setDataFilter] = (0,react/* useAtom */.fp)(discover/* 
dataFilterAtom */.EA);
     const [tableFieldValue, setTableFieldValue] = (0,react/* useAtom 
*/.fp)(discover/* tableFieldValuesAtom */.CL);
     const tableData = (0,react/* useAtomValue */.md)(discover/* tableDataAtom 
*/.q3);
+    const indexes = (0,react/* useAtomValue */.md)(discover/* indexesAtom 
*/.Eq);
     const { control, handleSubmit, watch, register, setValue, formState: { 
errors } } = (0,index_esm/* useForm */.mN)({
         defaultValues: {
             field: {
@@ -249,10 +250,8 @@ function FilterContent({ onHide, dataFilterValue }) {
                 label: op && op.label || op,
                 value: op && op.value || op
             }));
-        // text matching ops to remove for numeric fields
-        const textMatchOps = [
-            'like',
-            'not like',
+        // match_* operators require doris inverted index. Keep LIKE/NOT LIKE 
available for string-like fields
+        const matchOnlyOps = [
             'match_all',
             'match_any',
             'match_phrase',
@@ -270,18 +269,47 @@ function FilterContent({ onHide, dataFilterValue }) {
         }
         const isNumberOrTime = isNumberField || isTimeField;
         if (isNumberOrTime) {
-            // remove text match ops for number or time fields
+            // remove text match ops (including LIKE/NOT LIKE and match_*) for 
number or time fields
             return normalized.filter((opItem)=>{
                 const v = String(opItem.value).toLowerCase();
-                return !textMatchOps.includes(v);
+                return !(v === 'like' || v === 'not like' || 
matchOnlyOps.includes(v));
             });
         }
         // non-number, non-boolean, non-time fields: keep full list
+        // For string-like fields, only allow doris inverted-index text 
operators when the field has an inverted index
+        try {
+            const fieldName = typeof field === 'string' ? field : field === 
null || field === void 0 ? void 0 : field.value;
+            // If the user hasn't selected a field yet, show the full list (no 
gating)
+            if (!fieldName) {
+                return normalized;
+            }
+            // treat "string" here as any type except NUMBER, BOOLEAN, DATE
+            if (!isNumberField && !isBooleanField && !isTimeField) {
+                const hasInverted = Array.isArray(indexes) && 
indexes.some((idx)=>{
+                    if (!idx || !idx.columnName) {
+                        return false;
+                    }
+                    const t = idx.type || '';
+                    return String(idx.columnName) === String(fieldName) && 
t.toUpperCase().includes('INVERT');
+                });
+                if (!hasInverted) {
+                    // remove only the match_* operators; allow LIKE/NOT LIKE 
to remain because they work without inverted index
+                    return normalized.filter((opItem)=>{
+                        const v = String(opItem.value).toLowerCase();
+                        return !matchOnlyOps.includes(v);
+                    });
+                }
+            }
+        } catch (e) {
+        // swallow any unexpected errors and fall back to returning full list
+        }
         return normalized;
     }, [
         isNumberField,
         isBooleanField,
-        isTimeField
+        isTimeField,
+        field,
+        indexes
     ]);
     const getValue = (value)=>isNaN(+value) ? value : +value;
     // Convert an input value according to current field type.
@@ -1609,6 +1637,11 @@ function DiscoverHistogram() {
     })));
 }
 
+<<<<<<< Updated upstream
+=======
+// EXTERNAL MODULE: 
../node_modules/.pnpm/[email protected][email protected][email protected][email protected][email protected][email protected]/node_modules/antd/es/tooltip/index.js
 + 91 modules
+var tooltip = __webpack_require__(8644);
+>>>>>>> Stashed changes
 // EXTERNAL MODULE: 
../node_modules/.pnpm/[email protected][email protected][email protected][email protected][email protected][email protected]/node_modules/antd/es/button/index.js
 + 19 modules
 var es_button = __webpack_require__(3682);
 // EXTERNAL MODULE: 
../node_modules/.pnpm/@[email protected][email protected][email protected][email protected]/node_modules/@tanstack/react-table/build/lib/index.mjs
@@ -2098,6 +2131,7 @@ function 
discover_filter_filter_content_FilterContent(props) {
     const { onHide, dataFilterValue } = props;
     const [surroundingDataFilter, setSurroundingDataFilter] = (0,react/* 
useAtom */.fp)(discover/* surroundingDataFilterAtom */.wc);
     const tableFields = (0,react/* useAtomValue */.md)(discover/* 
tableFieldsAtom */.D_);
+    const indexes = (0,react/* useAtomValue */.md)(discover/* indexesAtom 
*/.Eq);
     if (false) // removed by dead control flow
 {}
     const [tableFieldValue, setTableFieldValue] = (0,react/* useAtom 
*/.fp)(discover/* tableFieldValuesAtom */.CL);
@@ -2144,10 +2178,8 @@ function 
discover_filter_filter_content_FilterContent(props) {
                 label: op && op.label || op,
                 value: op && op.value || op
             }));
-        // text matching ops to remove for numeric fields
-        const textMatchOps = [
-            'like',
-            'not like',
+        // match_* operators require doris inverted index. Keep LIKE/NOT LIKE 
available for string-like fields
+        const matchOnlyOps = [
             'match_all',
             'match_any',
             'match_phrase',
@@ -2165,18 +2197,44 @@ function 
discover_filter_filter_content_FilterContent(props) {
         }
         const isNumberOrTime = isNumberField || isTimeField;
         if (isNumberOrTime) {
-            // remove text match ops for number or time fields
+            // remove text match ops (including LIKE/NOT LIKE and match_*) for 
number or time fields
             return normalized.filter((opItem)=>{
                 const v = String(opItem.value).toLowerCase();
-                return !textMatchOps.includes(v);
+                return !(v === 'like' || v === 'not like' || 
matchOnlyOps.includes(v));
             });
         }
-        // non-number, non-boolean, non-time fields: keep full list
+        // non-number, non-boolean, non-time fields: keep full list but gate 
match_* on inverted index
+        try {
+            const fieldName = typeof field === 'string' ? field : field === 
null || field === void 0 ? void 0 : field.value;
+            if (!fieldName) {
+                return normalized;
+            }
+            if (!isNumberField && !isBooleanField && !isTimeField) {
+                const hasInverted = Array.isArray(indexes) && 
indexes.some((idx)=>{
+                    if (!idx || !idx.columnName) {
+                        return false;
+                    }
+                    const t = idx.type || '';
+                    return String(idx.columnName) === String(fieldName) && 
t.toUpperCase().includes('INVERT');
+                });
+                if (!hasInverted) {
+                    // remove only the match_* operators; allow LIKE/NOT LIKE 
to remain
+                    return normalized.filter((opItem)=>{
+                        const v = String(opItem.value).toLowerCase();
+                        return !matchOnlyOps.includes(v);
+                    });
+                }
+            }
+        } catch (e) {
+        // fallback to full list
+        }
         return normalized;
     }, [
         isNumberField,
         isBooleanField,
-        isTimeField
+        isTimeField,
+        field,
+        indexes
     ]);
     // Convert an input value according to current field type.
     // Preserve explicit empty string ('') so users can set an empty-string 
value.
@@ -3962,7 +4020,9 @@ function DiscoverContent({ fetchNextPage, getTraceData }) 
{
                                     max-height: 400px;
                                     overflow-y: auto;
                                 `
-        }, JSON.stringify(processedData, null, 2)))), /*#__PURE__*/ 
external_react_default().createElement("a", {
+        }, JSON.stringify(processedData, null, 2)))), /*#__PURE__*/ 
external_react_default().createElement(tooltip/* default */.A, {
+            title: "Surrounding Items will ignore the existing interface's 
filter conditions and view the context through time."
+        }, /*#__PURE__*/ external_react_default().createElement("a", {
             onClick: ()=>{
                 console.log('row', row);
                 setSurroundingLogsOpen(true);
@@ -3978,7 +4038,7 @@ function DiscoverContent({ fetchNextPage, getTraceData }) 
{
                             color: #3D71D9;
                         }
                     `
-        }, "Surrounding Logs"));
+        }, "Surrounding items")));
     };
     const callback = (status)=>{
         if (status >= 200 && status <= 299) {
@@ -4309,7 +4369,7 @@ function DiscoverContent({ fetchNextPage, getTraceData }) 
{
         traceTable: "otel_traces"
     }), surroundingLogsOpen && /*#__PURE__*/ 
external_react_default().createElement(ui_.Drawer, {
         size: "lg",
-        title: "Surrounding Logs",
+        title: "Surrounding items",
         onClose: ()=>{
             setSurroundingTableData([]);
             setSurroundingDataFilter([]);
@@ -4390,12 +4450,12 @@ function SearchType() {
     const searchMode = searchType === 'Search';
     const theme = (0,ui_.useTheme2)();
     const options = [
-        {
-            label: t`Search`,
-            value: 'Search',
-            disabled: indexes.length === 0,
-            tips: t`Discover.SearchType.Search.DisabledText`
-        },
+        // {
+        //     label: t`Search`,
+        //     value: 'Search',
+        //     disabled: indexes.length === 0,
+        //     tips: t`Discover.SearchType.Search.DisabledText`,
+        // },
         {
             label: 'SQL',
             value: 'SQL'
@@ -6882,6 +6942,7 @@ const testIds = {
 };
 
 
+<<<<<<< Updated upstream
 /***/ }),
 
 /***/ 4338:
@@ -7432,4 +7493,10 @@ const maxDurationAtom = 
(0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ .eU)(''
 /***/ })
 
 }]);
-//# sourceMappingURL=382.js.map?_cache=45ca3c194995374286b8
\ No newline at end of file
+//# sourceMappingURL=382.js.map?_cache=45ca3c194995374286b8
+=======
+/***/ })
+
+}]);
+//# sourceMappingURL=382.js.map?_cache=08e0206326f2c926fed2
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/382.js.map 
b/src/grafana/plugins/doris-app/382.js.map
index 2b89928..8b8cfcd 100644
--- a/src/grafana/plugins/doris-app/382.js.map
+++ b/src/grafana/plugins/doris-app/382.js.map
@@ -1 +1,5 @@
-{"version":3,"file":"382.js?_cache=45ca3c194995374286b8","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAmC;AACE;AAE9B,MAAME,wBAAwBD,yCAAMA,CAACE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuChD,CAAC,CAAC;AAEK,MAAMC,iBAAiBJ,YAAG,CAAC;;AAElC,CAAC,CAAC;AAEK,MAAMK,WAAWL,YAAG,CAAC;;;;AAI5B,CAAC,CAAC;AAEK,MAAMM,WAAWN,YAAG,CAAC;;AAE5B,CAAC,CAAC;AAEK,MAAMO,cAAcP,YAAG,CAAC;;;;;;;;;;;;;;;AAe/B,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzE4C;AACpB;AACM;AACsE;AAC
 [...]
\ No newline at end of file
+<<<<<<< Updated upstream
+{"version":3,"file":"382.js?_cache=45ca3c194995374286b8","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAmC;AACE;AAE9B,MAAME,wBAAwBD,yCAAMA,CAACE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuChD,CAAC,CAAC;AAEK,MAAMC,iBAAiBJ,YAAG,CAAC;;AAElC,CAAC,CAAC;AAEK,MAAMK,WAAWL,YAAG,CAAC;;;;AAI5B,CAAC,CAAC;AAEK,MAAMM,WAAWN,YAAG,CAAC;;AAE5B,CAAC,CAAC;AAEK,MAAMO,cAAcP,YAAG,CAAC;;;;;;;;;;;;;;;AAe/B,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzE4C;AACpB;AACM;AACsE;AAC
 [...]
+=======
+{"version":3,"file":"382.js?_cache=08e0206326f2c926fed2","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAmC;AACE;AAE9B,MAAME,wBAAwBD,yCAAMA,CAACE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuChD,CAAC,CAAC;AAEK,MAAMC,iBAAiBJ,YAAG,CAAC;;AAElC,CAAC,CAAC;AAEK,MAAMK,WAAWL,YAAG,CAAC;;;;AAI5B,CAAC,CAAC;AAEK,MAAMM,WAAWN,YAAG,CAAC;;AAE5B,CAAC,CAAC;AAEK,MAAMO,cAAcP,YAAG,CAAC;;;;;;;;;;;;;;;AAe/B,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzE4C;AACpB;AACM;AACsE;AAC
 [...]
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/42.js 
b/src/grafana/plugins/doris-app/42.js
index b120085..f131d7b 100644
--- a/src/grafana/plugins/doris-app/42.js
+++ b/src/grafana/plugins/doris-app/42.js
@@ -287,8 +287,13 @@ __webpack_require__.r(__webpack_exports__);
 
 
 
+<<<<<<< Updated upstream
 const Discover = /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_0___default().lazy(()=>Promise.all(/* import() 
*/[__webpack_require__.e(680), __webpack_require__.e(572), 
__webpack_require__.e(20), __webpack_require__.e(439), 
__webpack_require__.e(382)]).then(__webpack_require__.bind(__webpack_require__, 
382)));
 const PageTrace = /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_0___default().lazy(()=>Promise.all(/* import() 
*/[__webpack_require__.e(680), __webpack_require__.e(572), 
__webpack_require__.e(439), 
__webpack_require__.e(824)]).then(__webpack_require__.bind(__webpack_require__, 
6824)));
+=======
+const Discover = /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_0___default().lazy(()=>Promise.all(/* import() 
*/[__webpack_require__.e(680), __webpack_require__.e(572), 
__webpack_require__.e(20), __webpack_require__.e(439), 
__webpack_require__.e(659), 
__webpack_require__.e(382)]).then(__webpack_require__.bind(__webpack_require__, 
382)));
+const PageTrace = /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_0___default().lazy(()=>Promise.all(/* import() 
*/[__webpack_require__.e(680), __webpack_require__.e(572), 
__webpack_require__.e(439), __webpack_require__.e(659), 
__webpack_require__.e(824)]).then(__webpack_require__.bind(__webpack_require__, 
6824)));
+>>>>>>> Stashed changes
 // const PageDashboard = React.lazy(() => import('../../pages/PageDashboard'));
 function App(_props) {
     return /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__.Routes,
 null, /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_1__.Route,
 {
@@ -308,4 +313,8 @@ function App(_props) {
 /***/ })
 
 }]);
-//# sourceMappingURL=42.js.map?_cache=f3f97468bc0710881fb5
\ No newline at end of file
+<<<<<<< Updated upstream
+//# sourceMappingURL=42.js.map?_cache=f3f97468bc0710881fb5
+=======
+//# sourceMappingURL=42.js.map?_cache=dad0c51d1ead9b168bd4
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/42.js.map 
b/src/grafana/plugins/doris-app/42.js.map
index 593d144..8b4893c 100644
--- a/src/grafana/plugins/doris-app/42.js.map
+++ b/src/grafana/plugins/doris-app/42.js.map
@@ -1 +1,5 @@
-{"version":3,"file":"42.js?_cache=f3f97468bc0710881fb5","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACuC;AAEH;AAE7B,MAAME,kBAAkB,iDAAC,GAAG,EAAEF,WAAWG,EAAE,EAAE,GAAC;AAE9C,oCAAKC;;;;;WAAAA;MAKX;AAEM,MAAMC,cAAc,sBAAsB;AAC1C,0CAAKC;;;;;;;;;WAAAA;MASX;AAEM,MAAMC,kBAAkB;IAAEC,OAAO;IAAOC,OAAO;AAAM,EAAE;AACvD,MAAMC,oBAAoB;IAAEF,OAAO;IAAOC,OAAO;AAAM,EAAE;AAEzD,MAAME,iBAAiB;IAC1B;QACIC,oBAAoB;QACpBC,cAAc;QACdC,eAAe;QACfC,gBAAgB;IACpB;IACA;QACIH,oBAAoB;QACpBC,cAAc;QACdC,eAAe;QACfC,gBAAgB;IACpB;IACA;QA
 [...]
\ No newline at end of file
+<<<<<<< Updated upstream
+{"version":3,"file":"42.js?_cache=f3f97468bc0710881fb5","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACuC;AAEH;AAE7B,MAAME,kBAAkB,iDAAC,GAAG,EAAEF,WAAWG,EAAE,EAAE,GAAC;AAE9C,oCAAKC;;;;;WAAAA;MAKX;AAEM,MAAMC,cAAc,sBAAsB;AAC1C,0CAAKC;;;;;;;;;WAAAA;MASX;AAEM,MAAMC,kBAAkB;IAAEC,OAAO;IAAOC,OAAO;AAAM,EAAE;AACvD,MAAMC,oBAAoB;IAAEF,OAAO;IAAOC,OAAO;AAAM,EAAE;AAEzD,MAAME,iBAAiB;IAC1B;QACIC,oBAAoB;QACpBC,cAAc;QACdC,eAAe;QACfC,gBAAgB;IACpB;IACA;QACIH,oBAAoB;QACpBC,cAAc;QACdC,eAAe;QACfC,gBAAgB;IACpB;IACA;QA
 [...]
+=======
+{"version":3,"file":"42.js?_cache=dad0c51d1ead9b168bd4","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACuC;AAEH;AAE7B,MAAME,kBAAkB,iDAAC,GAAG,EAAEF,WAAWG,EAAE,EAAE,GAAC;AAE9C,oCAAKC;;;;;WAAAA;MAKX;AAEM,MAAMC,cAAc,sBAAsB;AAC1C,0CAAKC;;;;;;;;;WAAAA;MASX;AAEM,MAAMC,kBAAkB;IAAEC,OAAO;IAAOC,OAAO;AAAM,EAAE;AACvD,MAAMC,oBAAoB;IAAEF,OAAO;IAAOC,OAAO;AAAM,EAAE;AAEzD,MAAME,iBAAiB;IAC1B;QACIC,oBAAoB;QACpBC,cAAc;QACdC,eAAe;QACfC,gBAAgB;IACpB;IACA;QACIH,oBAAoB;QACpBC,cAAc;QACdC,eAAe;QACfC,gBAAgB;IACpB;IACA;QA
 [...]
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/439.js 
b/src/grafana/plugins/doris-app/439.js
index 875131d..0967acf 100644
--- a/src/grafana/plugins/doris-app/439.js
+++ b/src/grafana/plugins/doris-app/439.js
@@ -576,6 +576,7 @@ function getIndexesService({ selectdbDS, database, table }) 
{
 
 /***/ }),
 
+<<<<<<< Updated upstream
 /***/ 8763:
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
@@ -942,6 +943,8 @@ function trimSpacesAroundEquals(str) {
 
 /***/ }),
 
+=======
+>>>>>>> Stashed changes
 /***/ 9008:
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
@@ -986,8 +989,11 @@ function trimSpacesAroundEquals(str) {
 /* harmony import */ var _grafana_data__WEBPACK_IMPORTED_MODULE_9___default = 
/*#__PURE__*/__webpack_require__.n(_grafana_data__WEBPACK_IMPORTED_MODULE_9__);
 /* harmony import */ var dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_10__ = 
__webpack_require__(8837);
 /* harmony import */ var 
dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_10___default = 
/*#__PURE__*/__webpack_require__.n(dayjs_plugin_utc__WEBPACK_IMPORTED_MODULE_10__);
+<<<<<<< Updated upstream
 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_11__ = 
__webpack_require__(8763);
 
+=======
+>>>>>>> Stashed changes
 
 
 
@@ -1774,9 +1780,17 @@ function generateHighlightedResults(data, result) {
                 if (isWrappedInQuotes(keyword)) {
                     const parsedKeyword = parseKeywords(keyword);
                     if (parsedKeyword === strValue) {
+<<<<<<< Updated upstream
                         highlightValue = `<mark>${itemValue}</mark>`;
                     } else if (strValue.includes(parsedKeyword)) {
                         highlightValue = highlightDelimiter(strValue, 
parsedKeyword);
+=======
+                        // highlightValue = `<mark>${itemValue}</mark>`;
+                        highlightValue = itemValue;
+                    } else if (strValue.includes(parsedKeyword)) {
+                        // highlightValue = highlightDelimiter(strValue, 
parsedKeyword);
+                        highlightValue = strValue;
+>>>>>>> Stashed changes
                     }
                 } else {
                     const tokenizedAns = 
Array.from(js_tokens__WEBPACK_IMPORTED_MODULE_7___default()(strValue)).map((item)=>item.value);
@@ -1794,9 +1808,18 @@ function generateHighlightedResults(data, result) {
                     }
                     if (ans.length > 0) {
                         highlightValue = ans.reduce((acc, curr)=>{
+<<<<<<< Updated upstream
                             if 
(keywordsTokens.filter((token)=>!(0,_utils__WEBPACK_IMPORTED_MODULE_11__/* 
.isIgnorableHighlightToken */ 
.dW)(token)).find((token)=>compare_ignore_quotes(token, curr.toLowerCase())) || 
compare_ignore_quotes(keyword.toLowerCase(), curr.toLowerCase())) {
                                 return acc + `<mark>${curr}</mark>`;
                             }
+=======
+                            // if (
+                            //     keywordsTokens.filter(token => 
!isIgnorableHighlightToken(token)).find(token => compare_ignore_quotes(token, 
curr.toLowerCase())) ||
+                            //     
compare_ignore_quotes(keyword.toLowerCase(), curr.toLowerCase())
+                            // ) {
+                            //     return acc + `<mark>${curr}</mark>`;
+                            // }
+>>>>>>> Stashed changes
                             return acc + curr;
                         }, '');
                     }
@@ -1833,4 +1856,8 @@ const QUERY_TRACE_FIELDS = (/* unused pure expression or 
super */ null && ([
 /***/ })
 
 }]);
-//# sourceMappingURL=439.js.map?_cache=731b5943bdc7c1368ebd
\ No newline at end of file
+<<<<<<< Updated upstream
+//# sourceMappingURL=439.js.map?_cache=731b5943bdc7c1368ebd
+=======
+//# sourceMappingURL=439.js.map?_cache=bd08506ba880e5929bd3
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/439.js.map 
b/src/grafana/plugins/doris-app/439.js.map
index d35992b..310d301 100644
--- a/src/grafana/plugins/doris-app/439.js.map
+++ b/src/grafana/plugins/doris-app/439.js.map
@@ -1 +1,5 @@
-{"version":3,"file":"439.js?_cache=731b5943bdc7c1368ebd","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA6B;AAC6B;AAC1D,2CAA2C;AACO;AAGuC;AACiC;AAEnH,MAAMU,eAAeP,yEAAgBA,GAAG;AACxC,MAAMQ,iBAAiBX,qDAAIA,CAAmB,EAAE,EAAE;AAClD,MAAMY,sBAAsBZ,qDAAIA,CAAkBM,0EAAuBA,EAAE;AAElF,YAAY;AACL,MAAMO,gBAAgBb,qDAAIA,CAAM,EAAE,EAAE;AACpC,MAAMc,uBAAuBd,qDAAIA,CAAM,EAAE,EAAE;AAC3C,MAAMe,aAAaf,qDAAIA,CAAM,EAAE,EAAE;AACjC,MAAMgB,oBAAoBhB,qDAAIA,CAAM,EAAE,EAAE;AAExC,MAAMiB,qBAAq
 [...]
\ No newline at end of file
+<<<<<<< Updated upstream
+{"version":3,"file":"439.js?_cache=731b5943bdc7c1368ebd","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA6B;AAC6B;AAC1D,2CAA2C;AACO;AAGuC;AACiC;AAEnH,MAAMU,eAAeP,yEAAgBA,GAAG;AACxC,MAAMQ,iBAAiBX,qDAAIA,CAAmB,EAAE,EAAE;AAClD,MAAMY,sBAAsBZ,qDAAIA,CAAkBM,0EAAuBA,EAAE;AAElF,YAAY;AACL,MAAMO,gBAAgBb,qDAAIA,CAAM,EAAE,EAAE;AACpC,MAAMc,uBAAuBd,qDAAIA,CAAM,EAAE,EAAE;AAC3C,MAAMe,aAAaf,qDAAIA,CAAM,EAAE,EAAE;AACjC,MAAMgB,oBAAoBhB,qDAAIA,CAAM,EAAE,EAAE;AAExC,MAAMiB,qBAAq
 [...]
+=======
+{"version":3,"file":"439.js?_cache=bd08506ba880e5929bd3","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA6B;AAC6B;AAC1D,2CAA2C;AACO;AAGuC;AACiC;AAEnH,MAAMU,eAAeP,yEAAgBA,GAAG;AACxC,MAAMQ,iBAAiBX,qDAAIA,CAAmB,EAAE,EAAE;AAClD,MAAMY,sBAAsBZ,qDAAIA,CAAkBM,0EAAuBA,EAAE;AAElF,YAAY;AACL,MAAMO,gBAAgBb,qDAAIA,CAAM,EAAE,EAAE;AACpC,MAAMc,uBAAuBd,qDAAIA,CAAM,EAAE,EAAE;AAC3C,MAAMe,aAAaf,qDAAIA,CAAM,EAAE,EAAE;AACjC,MAAMgB,oBAAoBhB,qDAAIA,CAAM,EAAE,EAAE;AAExC,MAAMiB,qBAAq
 [...]
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/659.js 
b/src/grafana/plugins/doris-app/659.js
new file mode 100644
index 0000000..9127ad1
--- /dev/null
+++ b/src/grafana/plugins/doris-app/659.js
@@ -0,0 +1,917 @@
+"use strict";
+(self["webpackChunkdoris_app"] = self["webpackChunkdoris_app"] || 
[]).push([[659],{
+
+/***/ 4338:
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+  jo: () => (/* binding */ getOperationListService),
+  FC: () => (/* binding */ getServiceListService),
+  hA: () => (/* binding */ getTableDataTraceService),
+  Cy: () => (/* binding */ getTracesService)
+});
+
+// EXTERNAL MODULE: external "@grafana/runtime"
+var runtime_ = __webpack_require__(8531);
+;// ./services/traces.sql.ts
+// 查询某个Table的Trace详情
+function getQueryTableTraceSQL(params) {
+    const { table, trace_id, database } = params;
+    const sql = `
+      SELECT
+        trace_id AS traceID,
+        span_id AS spanID,
+        parent_span_id AS parentSpanID,
+        span_name AS operationName,
+        service_name AS serviceName,
+        CONCAT(
+          '[',
+          array_join(
+            array_map(
+              (x, y) -> json_object('key', x, 'value', y),
+              map_keys(CAST(CAST(resource_attributes AS TEXT) AS MAP<STRING, 
STRING>)),
+              map_values(CAST(CAST(resource_attributes AS TEXT) AS MAP<STRING, 
STRING>))
+            ),
+            ','
+          ),
+          ']'
+        ) AS serviceTags,
+        UNIX_TIMESTAMP(timestamp) * 1000 AS startTime,
+        duration / 1000 AS duration,
+        CONCAT(
+          '[',
+          array_join(
+            array_map(
+              (x, y) -> json_object('key', x, 'value', y),
+              map_keys(CAST(CAST(span_attributes AS TEXT) AS MAP<STRING, 
STRING>)),
+              map_values(CAST(CAST(span_attributes AS TEXT) AS MAP<STRING, 
STRING>))
+            ),
+            ','
+          ),
+          ']'
+        ) AS tags,
+        span_kind AS kind,
+        CASE status_code
+          WHEN 'STATUS_CODE_OK' THEN 1
+          WHEN 'STATUS_CODE_ERROR' THEN 2
+          ELSE 0
+        END AS statusCode,
+        status_message AS statusMessage,
+        scope_name AS instrumentationLibraryName,
+        scope_version AS instrumentationLibraryVersion,
+        trace_state AS traceState
+      FROM ${database}.\`${table}\`
+      WHERE trace_id = '${trace_id}';
+    `;
+    return sql;
+}
+function parseDuration(input) {
+    if (!input) {
+        return 0;
+    }
+    if (input.endsWith('ms')) {
+        return parseFloat(input.replace('ms', ''));
+    } else if (input.endsWith('us')) {
+        return parseFloat(input.replace('us', '')) / 1000;
+    } else if (input.endsWith('s')) {
+        return parseFloat(input.replace('s', '')) * 1000;
+    }
+    return 0;
+}
+function tagsToDorisSQLConditions(tags) {
+    if (!tags) {
+        return '1=1';
+    }
+    const conditions = [];
+    const regex = /([\w.]+)=(?:"([^"]+)"|'([^']+)'|([^\s]+))/g;
+    let match;
+    while((match = regex.exec(tags)) !== null){
+        const key = match[1];
+        const val = match[2] || match[3] || match[4];
+        conditions.push(`span_attributes['${key}'] = '${val}'`);
+    }
+    return conditions.length > 0 ? conditions.join(' AND ') : '1=1';
+}
+function buildTraceAggSQLFromParams(params) {
+    const timeFilter = `${params.timeField} >= '${params.startDate}' AND 
${params.timeField} < '${params.endDate}'`;
+    const serviceFilter = params.service_name && params.service_name !== 'all' 
? `service_name = '${params.service_name}'` : '1=1';
+    const operationFilter = params.operation && params.operation !== 'all' ? 
`span_name = '${params.operation}'` : '1=1';
+    const statusFilter = params.statusCode && params.statusCode !== 'all' ? 
`status_code = '${params.statusCode}'` : '1=1';
+    const minDuration = parseDuration(params.minDuration);
+    const maxDuration = parseDuration(params.maxDuration);
+    let durationFilter = '1=1';
+    if (minDuration > 0 && maxDuration > 0) {
+        durationFilter = `trace_duration BETWEEN ${minDuration} AND 
${maxDuration}`;
+    } else if (minDuration > 0) {
+        durationFilter = `trace_duration >= ${minDuration}`;
+    } else if (maxDuration > 0) {
+        durationFilter = `trace_duration <= ${maxDuration}`;
+    }
+    const tagsFilter = tagsToDorisSQLConditions(params.tags);
+    let rootSpansFilter = '1=1';
+    if (params.service_name && params.service_name !== 'all') {
+        rootSpansFilter = `service_name = '${params.service_name}'`;
+    }
+    if (params.operation && params.operation !== 'all') {
+        rootSpansFilter += ` AND span_name = '${params.operation}'`;
+    }
+    var _params_page_size;
+    const limit = (_params_page_size = params.page_size) !== null && 
_params_page_size !== void 0 ? _params_page_size : 1000;
+    var _params_page;
+    const offset = Math.max((((_params_page = params.page) !== null && 
_params_page !== void 0 ? _params_page : 1) - 1) * limit, 0);
+    let rowNumberOrderBy = 'time DESC';
+    switch(params.sortBy){
+        case 'longest-duration':
+            rowNumberOrderBy = 'trace_duration_ms DESC';
+            break;
+        case 'shortest-duration':
+            rowNumberOrderBy = 'trace_duration_ms ASC';
+            break;
+        case 'most-spans':
+            rowNumberOrderBy = 'spans DESC';
+            break;
+        case 'least-spans':
+            rowNumberOrderBy = 'spans ASC';
+            break;
+        case 'most-recent':
+            rowNumberOrderBy = 'time DESC';
+            break;
+    }
+    const query = `
+USE ${params.database};
+
+WITH
+  trace_durations AS (
+    SELECT
+      trace_id,
+      (UNIX_TIMESTAMP(MAX(end_time)) - UNIX_TIMESTAMP(MIN(timestamp))) * 1000 
AS trace_duration
+    FROM ${params.table}
+    WHERE ${timeFilter}
+    GROUP BY trace_id
+  ),
+  all_trace_ids AS (
+    SELECT
+      t.trace_id,
+      MIN(t.${params.timeField}) AS time,
+      d.trace_duration
+    FROM ${params.table} t
+    JOIN trace_durations d ON t.trace_id = d.trace_id
+    WHERE
+      ${timeFilter}
+      AND ${serviceFilter}
+      AND ${operationFilter}
+      AND ${statusFilter}
+      AND ${tagsFilter}
+      AND 1=1
+      AND ${durationFilter}
+    GROUP BY t.trace_id, d.trace_duration
+  ),
+  root_spans AS (
+    SELECT
+      trace_id,
+      span_name AS operation,
+      service_name AS root_service
+    FROM ${params.table}
+    WHERE (parent_span_id IS NULL OR parent_span_id = '') AND 
${rootSpansFilter} AND ${timeFilter}
+  ),
+  aggregated AS (
+    SELECT
+      UNIX_TIMESTAMP(MIN(t.${params.timeField})) AS time,
+      t.trace_id,
+      r.operation,
+      r.root_service,
+      COLLECT_SET(t.service_name) AS services,
+      COUNT(*) AS spans,
+      SUM(IF(status_code = 'STATUS_CODE_ERROR', 1, 0)) AS error_spans,
+      MAX(duration) / 1000 AS max_span_duration_ms,
+      MAX(UNIX_TIMESTAMP(t.timestamp) * 1000 + duration / 1000) - 
MIN(UNIX_TIMESTAMP(t.timestamp) * 1000) AS trace_duration_ms,
+      MAX(IF(t.parent_span_id IS NULL OR t.parent_span_id = '', duration, 0)) 
/ 1000 AS root_span_duration_ms
+    FROM ${params.table} t
+    JOIN all_trace_ids a ON t.trace_id = a.trace_id
+    JOIN root_spans r ON t.trace_id = r.trace_id
+    GROUP BY t.trace_id, r.operation, r.root_service
+  ),
+  numbered AS (
+    SELECT
+      a.*,
+      COUNT(*) OVER() AS total_count,
+      ROW_NUMBER() OVER(ORDER BY ${rowNumberOrderBy}) AS rn
+    FROM aggregated a
+  )
+
+SELECT
+  *,
+  total_count AS total
+FROM numbered
+WHERE rn > ${offset} AND rn <= ${offset + limit}
+ORDER BY ${rowNumberOrderBy};
+`;
+    return query;
+}
+function getServiceListSQL(params) {
+    return `
+    SELECT DISTINCT service_name 
+    FROM ${params.table} 
+    WHERE ${params.timeField} BETWEEN '${params.startDate}' AND 
'${params.endDate}' 
+    ORDER BY service_name ASC
+  `;
+}
+function getOperationListSQL(params) {
+    return `
+    SELECT DISTINCT span_name 
+    FROM ${params.table} 
+    WHERE ${params.timeField} BETWEEN '${params.startDate}' AND 
'${params.endDate}' 
+    AND service_name = '${params.service_name}'
+    ORDER BY span_name ASC
+  `;
+}
+
+;// ./services/traces.ts
+function _object_without_properties(source, excluded) {
+    if (source == null) return {};
+    var target = _object_without_properties_loose(source, excluded);
+    var key, i;
+    if (Object.getOwnPropertySymbols) {
+        var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+        for(i = 0; i < sourceSymbolKeys.length; i++){
+            key = sourceSymbolKeys[i];
+            if (excluded.indexOf(key) >= 0) continue;
+            if (!Object.prototype.propertyIsEnumerable.call(source, key)) 
continue;
+            target[key] = source[key];
+        }
+    }
+    return target;
+}
+function _object_without_properties_loose(source, excluded) {
+    if (source == null) return {};
+    var target = {};
+    var sourceKeys = Object.keys(source);
+    var key, i;
+    for(i = 0; i < sourceKeys.length; i++){
+        key = sourceKeys[i];
+        if (excluded.indexOf(key) >= 0) continue;
+        target[key] = source[key];
+    }
+    return target;
+}
+
+
+// 获取table的Trace数据
+function getTableDataTraceService(payload) {
+    const { selectdbDS } = payload, rest = _object_without_properties(payload, 
[
+        "selectdbDS"
+    ]);
+    const traceSQL = getQueryTableTraceSQL(rest);
+    return (0,runtime_.getBackendSrv)().fetch({
+        url: '/api/ds/query',
+        method: 'POST',
+        data: {
+            queries: [
+                {
+                    refId: 'getTableDataTrace',
+                    datasource: {
+                        type: 'mysql',
+                        uid: selectdbDS.uid
+                    },
+                    rawSql: traceSQL,
+                    format: 'table'
+                }
+            ]
+        },
+        credentials: 'include'
+    });
+}
+// 查询Traces
+function getTracesService(payload) {
+    const { selectdbDS } = payload, rest = _object_without_properties(payload, 
[
+        "selectdbDS"
+    ]);
+    const getTracesSQL = buildTraceAggSQLFromParams(rest);
+    return (0,runtime_.getBackendSrv)().fetch({
+        url: '/api/ds/query',
+        method: 'POST',
+        data: {
+            queries: [
+                {
+                    refId: 'getTraces',
+                    datasource: {
+                        type: 'mysql',
+                        uid: selectdbDS.uid
+                    },
+                    rawSql: getTracesSQL,
+                    format: 'table'
+                }
+            ]
+        },
+        credentials: 'include'
+    });
+}
+// 查询Trace Services
+function getServiceListService(payload) {
+    const { selectdbDS } = payload, rest = _object_without_properties(payload, 
[
+        "selectdbDS"
+    ]);
+    const serviceListSQL = getServiceListSQL(rest);
+    return (0,runtime_.getBackendSrv)().fetch({
+        url: '/api/ds/query',
+        method: 'POST',
+        data: {
+            queries: [
+                {
+                    refId: 'getServiceList',
+                    datasource: {
+                        type: 'mysql',
+                        uid: selectdbDS.uid
+                    },
+                    rawSql: serviceListSQL,
+                    format: 'table'
+                }
+            ]
+        },
+        credentials: 'include'
+    });
+}
+// 查询Trace Operations
+function getOperationListService(payload) {
+    const { selectdbDS } = payload, rest = _object_without_properties(payload, 
[
+        "selectdbDS"
+    ]);
+    const operationListSQL = getOperationListSQL(rest);
+    return (0,runtime_.getBackendSrv)().fetch({
+        url: '/api/ds/query',
+        method: 'POST',
+        data: {
+            queries: [
+                {
+                    refId: 'getOperationList',
+                    datasource: {
+                        type: 'mysql',
+                        uid: selectdbDS.uid
+                    },
+                    rawSql: operationListSQL,
+                    format: 'table'
+                }
+            ]
+        },
+        credentials: 'include'
+    });
+}
+
+
+/***/ }),
+
+/***/ 7273:
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   A: () => (/* binding */ TraceDetail)
+/* harmony export */ });
+/* harmony import */ var _grafana_data__WEBPACK_IMPORTED_MODULE_0__ = 
__webpack_require__(7781);
+/* harmony import */ var _grafana_data__WEBPACK_IMPORTED_MODULE_0___default = 
/*#__PURE__*/__webpack_require__.n(_grafana_data__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _grafana_runtime__WEBPACK_IMPORTED_MODULE_1__ = 
__webpack_require__(8531);
+/* harmony import */ var _grafana_runtime__WEBPACK_IMPORTED_MODULE_1___default 
= 
/*#__PURE__*/__webpack_require__.n(_grafana_runtime__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _grafana_ui__WEBPACK_IMPORTED_MODULE_2__ = 
__webpack_require__(2007);
+/* harmony import */ var _grafana_ui__WEBPACK_IMPORTED_MODULE_2___default = 
/*#__PURE__*/__webpack_require__.n(_grafana_ui__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_3__ = 
__webpack_require__(122);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = 
__webpack_require__(5959);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = 
/*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _services_traces__WEBPACK_IMPORTED_MODULE_5__ = 
__webpack_require__(4338);
+/* harmony import */ var _store_discover__WEBPACK_IMPORTED_MODULE_6__ = 
__webpack_require__(2539);
+/* harmony import */ var _store_traces__WEBPACK_IMPORTED_MODULE_7__ = 
__webpack_require__(8882);
+/* harmony import */ var _utils_data__WEBPACK_IMPORTED_MODULE_8__ = 
__webpack_require__(9008);
+function _define_property(obj, key, value) {
+    if (key in obj) {
+        Object.defineProperty(obj, key, {
+            value: value,
+            enumerable: true,
+            configurable: true,
+            writable: true
+        });
+    } else {
+        obj[key] = value;
+    }
+    return obj;
+}
+function _object_spread(target) {
+    for(var i = 1; i < arguments.length; i++){
+        var source = arguments[i] != null ? arguments[i] : {};
+        var ownKeys = Object.keys(source);
+        if (typeof Object.getOwnPropertySymbols === "function") {
+            ownKeys = 
ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
+                return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+            }));
+        }
+        ownKeys.forEach(function(key) {
+            _define_property(target, key, source[key]);
+        });
+    }
+    return target;
+}
+
+
+
+
+
+
+
+
+
+function TraceDetail(props) {
+    const currentTable = (0,jotai__WEBPACK_IMPORTED_MODULE_3__/* .useAtomValue 
*/ .md)(_store_traces__WEBPACK_IMPORTED_MODULE_7__/* .currentTraceTableAtom */ 
.AZ);
+    const currentCatalog = (0,jotai__WEBPACK_IMPORTED_MODULE_3__/* 
.useAtomValue */ .md)(_store_discover__WEBPACK_IMPORTED_MODULE_6__/* 
.currentCatalogAtom */ .K0);
+    const currentDatabase = (0,jotai__WEBPACK_IMPORTED_MODULE_3__/* 
.useAtomValue */ .md)(_store_discover__WEBPACK_IMPORTED_MODULE_6__/* 
.currentDatabaseAtom */ .Cf);
+    const [traceData, setTraceData] = (0,jotai__WEBPACK_IMPORTED_MODULE_3__/* 
.useAtom */ .fp)(_store_discover__WEBPACK_IMPORTED_MODULE_6__/* 
.tableTracesDataAtom */ .UB);
+    const selectedRow = (0,jotai__WEBPACK_IMPORTED_MODULE_3__/* .useAtomValue 
*/ .md)(_store_discover__WEBPACK_IMPORTED_MODULE_6__/* .selectedRowAtom */ .nn);
+    const selectdbDS = (0,jotai__WEBPACK_IMPORTED_MODULE_3__/* .useAtomValue 
*/ .md)(_store_discover__WEBPACK_IMPORTED_MODULE_6__/* .selectedDatasourceAtom 
*/ .SW);
+    const traceTable = (props === null || props === void 0 ? void 0 : 
props.traceTable) || currentTable || 'otel_traces';
+    const [loading, setLoading] = 
react__WEBPACK_IMPORTED_MODULE_4___default().useState(false);
+    const { open, traceId } = props;
+    const getTraceData = 
react__WEBPACK_IMPORTED_MODULE_4___default().useCallback(()=>{
+        let payload = {
+            catalog: currentCatalog,
+            database: currentDatabase,
+            table: traceTable,
+            cluster: '',
+            sort: 'DESC',
+            trace_id: traceId || ''
+        };
+        setLoading(true);
+        (0,_services_traces__WEBPACK_IMPORTED_MODULE_5__/* 
.getTableDataTraceService */ .hA)(_object_spread({
+            selectdbDS
+        }, payload)).subscribe({
+            next: ({ data, ok })=>{
+                setLoading(false);
+                if (ok) {
+                    const formatedData = 
(0,_utils_data__WEBPACK_IMPORTED_MODULE_8__/* .formatTracesResData */ 
.O1)(data.results.getTableDataTrace.frames[0]);
+                    setTraceData(formatedData);
+                }
+            },
+            error: (err)=>{
+                setLoading(false);
+                console.log('Fetch Error', err);
+            }
+        });
+    }, [
+        currentCatalog,
+        currentDatabase,
+        traceTable,
+        selectdbDS,
+        setTraceData,
+        traceId
+    ]);
+    (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(()=>{
+        if (traceId) {
+            getTraceData();
+        }
+    }, [
+        selectedRow.trace_id,
+        currentCatalog,
+        currentDatabase,
+        selectdbDS,
+        setTraceData,
+        getTraceData,
+        traceId
+    ]);
+    function renderTracePanel() {
+        if (traceData) {
+            return /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_grafana_runtime__WEBPACK_IMPORTED_MODULE_1__.PanelRenderer,
 {
+                title: "trace panel",
+                width: 200,
+                height: 300,
+                pluginId: "traces",
+                options: {},
+                data: {
+                    state: loading ? 
_grafana_data__WEBPACK_IMPORTED_MODULE_0__.LoadingState.Loading : 
_grafana_data__WEBPACK_IMPORTED_MODULE_0__.LoadingState.Done,
+                    series: [
+                        traceData
+                    ],
+                    timeRange: {
+                        from: new Date(Date.now() - 15 * 60 * 1000),
+                        to: new Date(),
+                        raw: {
+                            from: 'now-15m',
+                            to: 'now'
+                        }
+                    }
+                }
+            });
+        }
+        return null;
+    }
+    return /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_4___default().createElement((react__WEBPACK_IMPORTED_MODULE_4___default().Fragment),
 null, open && /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_grafana_ui__WEBPACK_IMPORTED_MODULE_2__.Drawer,
 {
+        title: "Trace Panel",
+        onClose: ()=>{
+            var _props_onClose;
+            props === null || props === void 0 ? void 0 : (_props_onClose = 
props.onClose) === null || _props_onClose === void 0 ? void 0 : 
_props_onClose.call(props);
+        },
+        size: "lg"
+    }, loading ? /*#__PURE__*/ 
react__WEBPACK_IMPORTED_MODULE_4___default().createElement(_grafana_ui__WEBPACK_IMPORTED_MODULE_2__.LoadingPlaceholder,
 {
+        text: `Loading`
+    }) : renderTracePanel()));
+}
+
+
+/***/ }),
+
+/***/ 8763:
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   gw: () => (/* binding */ trimSpacesAroundEquals),
+/* harmony export */   sd: () => (/* binding */ generateTableDataUID)
+/* harmony export */ });
+/* unused harmony exports generateUid, isIgnorableHighlightToken */
+// --- stable stringify: 递归排序键,避免循环引用导致崩溃 ---
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
+    try {
+        var info = gen[key](arg);
+        var value = info.value;
+    } catch (error) {
+        reject(error);
+        return;
+    }
+    if (info.done) {
+        resolve(value);
+    } else {
+        Promise.resolve(value).then(_next, _throw);
+    }
+}
+function _async_to_generator(fn) {
+    return function() {
+        var self = this, args = arguments;
+        return new Promise(function(resolve, reject) {
+            var gen = fn.apply(self, args);
+            function _next(value) {
+                asyncGeneratorStep(gen, resolve, reject, _next, _throw, 
"next", value);
+            }
+            function _throw(err) {
+                asyncGeneratorStep(gen, resolve, reject, _next, _throw, 
"throw", err);
+            }
+            _next(undefined);
+        });
+    };
+}
+function _define_property(obj, key, value) {
+    if (key in obj) {
+        Object.defineProperty(obj, key, {
+            value: value,
+            enumerable: true,
+            configurable: true,
+            writable: true
+        });
+    } else {
+        obj[key] = value;
+    }
+    return obj;
+}
+function _object_spread(target) {
+    for(var i = 1; i < arguments.length; i++){
+        var source = arguments[i] != null ? arguments[i] : {};
+        var ownKeys = Object.keys(source);
+        if (typeof Object.getOwnPropertySymbols === "function") {
+            ownKeys = 
ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
+                return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+            }));
+        }
+        ownKeys.forEach(function(key) {
+            _define_property(target, key, source[key]);
+        });
+    }
+    return target;
+}
+function ownKeys(object, enumerableOnly) {
+    var keys = Object.keys(object);
+    if (Object.getOwnPropertySymbols) {
+        var symbols = Object.getOwnPropertySymbols(object);
+        if (enumerableOnly) {
+            symbols = symbols.filter(function(sym) {
+                return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+            });
+        }
+        keys.push.apply(keys, symbols);
+    }
+    return keys;
+}
+function _object_spread_props(target, source) {
+    source = source != null ? source : {};
+    if (Object.getOwnPropertyDescriptors) {
+        Object.defineProperties(target, 
Object.getOwnPropertyDescriptors(source));
+    } else {
+        ownKeys(Object(source)).forEach(function(key) {
+            Object.defineProperty(target, key, 
Object.getOwnPropertyDescriptor(source, key));
+        });
+    }
+    return target;
+}
+function stableStringify(value) {
+    const seen = new WeakSet();
+    const recur = (v)=>{
+        if (v === null) {
+            return 'null';
+        }
+        const t = typeof v;
+        if (t === 'number') {
+            return Number.isFinite(v) ? String(v) : 'null';
+        }
+        if (t === 'boolean') {
+            return v ? 'true' : 'false';
+        }
+        if (t === 'string') {
+            return JSON.stringify(v);
+        }
+        if (t === 'bigint') {
+            return JSON.stringify(v.toString());
+        }
+        if (t === 'undefined' || t === 'function' || t === 'symbol') {
+            return 'null';
+        }
+        // object / array
+        if (seen.has(v)) {
+            return '"[Circular]"';
+        }
+        seen.add(v);
+        if (Array.isArray(v)) {
+            return '[' + v.map(recur).join(',') + ']';
+        }
+        const keys = Object.keys(v).sort();
+        const body = keys.map((k)=>JSON.stringify(k) + ':' + 
recur(v[k])).join(',');
+        return '{' + body + '}';
+    };
+    return recur(value);
+}
+// --- 小工具 ---
+function u8ToHex(u8) {
+    let out = '';
+    for(let i = 0; i < u8.length; i++){
+        out += u8[i].toString(16).padStart(2, '0');
+    }
+    return out;
+}
+function hasSubtle() {
+    var _window_crypto_subtle;
+    return typeof window !== 'undefined' && !!window.crypto && 
!!window.isSecureContext && typeof ((_window_crypto_subtle = 
window.crypto.subtle) === null || _window_crypto_subtle === void 0 ? void 0 : 
_window_crypto_subtle.digest) === 'function';
+}
+// --- 纯 JS 的 SHA-256 fallback(简实现,无依赖) ---
+function sha256HexJS(data) {
+    // 常量
+    const K = new Uint32Array([
+        0x428a2f98,
+        0x71374491,
+        0xb5c0fbcf,
+        0xe9b5dba5,
+        0x3956c25b,
+        0x59f111f1,
+        0x923f82a4,
+        0xab1c5ed5,
+        0xd807aa98,
+        0x12835b01,
+        0x243185be,
+        0x550c7dc3,
+        0x72be5d74,
+        0x80deb1fe,
+        0x9bdc06a7,
+        0xc19bf174,
+        0xe49b69c1,
+        0xefbe4786,
+        0x0fc19dc6,
+        0x240ca1cc,
+        0x2de92c6f,
+        0x4a7484aa,
+        0x5cb0a9dc,
+        0x76f988da,
+        0x983e5152,
+        0xa831c66d,
+        0xb00327c8,
+        0xbf597fc7,
+        0xc6e00bf3,
+        0xd5a79147,
+        0x06ca6351,
+        0x14292967,
+        0x27b70a85,
+        0x2e1b2138,
+        0x4d2c6dfc,
+        0x53380d13,
+        0x650a7354,
+        0x766a0abb,
+        0x81c2c92e,
+        0x92722c85,
+        0xa2bfe8a1,
+        0xa81a664b,
+        0xc24b8b70,
+        0xc76c51a3,
+        0xd192e819,
+        0xd6990624,
+        0xf40e3585,
+        0x106aa070,
+        0x19a4c116,
+        0x1e376c08,
+        0x2748774c,
+        0x34b0bcb5,
+        0x391c0cb3,
+        0x4ed8aa4a,
+        0x5b9cca4f,
+        0x682e6ff3,
+        0x748f82ee,
+        0x78a5636f,
+        0x84c87814,
+        0x8cc70208,
+        0x90befffa,
+        0xa4506ceb,
+        0xbef9a3f7,
+        0xc67178f2
+    ]);
+    // 初始哈希
+    let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 
= 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
+    // 预处理:填充
+    const l = data.length;
+    const bitLenHi = l >>> 29 >>> 0;
+    const bitLenLo = l << 3 >>> 0;
+    const nBlocks = (l + 9 >> 6) + 1 << 4; // 以 16 个 32bit 为一组
+    const M = new Uint32Array(nBlocks);
+    for(let i = 0; i < l; i++){
+        M[i >> 2] |= data[i] << (3 - (i & 3) << 3);
+    }
+    M[l >> 2] |= 0x80 << (3 - (l & 3) << 3);
+    M[nBlocks - 2] = bitLenHi;
+    M[nBlocks - 1] = bitLenLo;
+    const W = new Uint32Array(64);
+    const rotr = (x, n)=>x >>> n | x << 32 - n;
+    for(let i = 0; i < nBlocks; i += 16){
+        for(let t = 0; t < 16; t++){
+            W[t] = M[i + t];
+        }
+        for(let t = 16; t < 64; t++){
+            const s0 = (rotr(W[t - 15], 7) ^ rotr(W[t - 15], 18) ^ W[t - 15] 
>>> 3) >>> 0;
+            const s1 = (rotr(W[t - 2], 17) ^ rotr(W[t - 2], 19) ^ W[t - 2] >>> 
10) >>> 0;
+            W[t] = W[t - 16] + s0 + W[t - 7] + s1 >>> 0;
+        }
+        let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7;
+        for(let t = 0; t < 64; t++){
+            const S1 = (rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)) >>> 0;
+            const ch = (e & f ^ ~e & g) >>> 0;
+            const T1 = h + S1 + ch + K[t] + W[t] >>> 0;
+            const S0 = (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) >>> 0;
+            const maj = (a & b ^ a & c ^ b & c) >>> 0;
+            const T2 = S0 + maj >>> 0;
+            h = g;
+            g = f;
+            f = e;
+            e = d + T1 >>> 0;
+            d = c;
+            c = b;
+            b = a;
+            a = T1 + T2 >>> 0;
+        }
+        h0 = h0 + a >>> 0;
+        h1 = h1 + b >>> 0;
+        h2 = h2 + c >>> 0;
+        h3 = h3 + d >>> 0;
+        h4 = h4 + e >>> 0;
+        h5 = h5 + f >>> 0;
+        h6 = h6 + g >>> 0;
+        h7 = h7 + h >>> 0;
+    }
+    const out = new Uint8Array(32);
+    const H = [
+        h0,
+        h1,
+        h2,
+        h3,
+        h4,
+        h5,
+        h6,
+        h7
+    ];
+    for(let i = 0; i < 8; i++){
+        out[i * 4 + 0] = H[i] >>> 24 & 0xff;
+        out[i * 4 + 1] = H[i] >>> 16 & 0xff;
+        out[i * 4 + 2] = H[i] >>> 8 & 0xff;
+        out[i * 4 + 3] = H[i] & 0xff;
+    }
+    return u8ToHex(out);
+}
+// --- 通用 SHA-256(浏览器优先,fallback 到纯 JS) ---
+function sha256Hex(input) {
+    return _async_to_generator(function*() {
+        const data = new TextEncoder().encode(input);
+        if (hasSubtle()) {
+            const buf = yield window.crypto.subtle.digest('SHA-256', data);
+            return u8ToHex(new Uint8Array(buf));
+        }
+        // 非 https 或老环境:走纯 JS
+        return sha256HexJS(data);
+    })();
+}
+// --- 你的两个导出函数 ---
+function generateUid(obj) {
+    return _async_to_generator(function*() {
+        const json = stableStringify(obj);
+        return sha256Hex(json);
+    })();
+}
+function generateTableDataUID(items) {
+    return _async_to_generator(function*() {
+        // 允许 _original 缺失时退回整个 item;并发计算,更快
+        const sources = items.map((it)=>{
+            var _ref;
+            return (_ref = it && it._original) !== null && _ref !== void 0 ? 
_ref : it;
+        });
+        const uids = yield Promise.all(sources.map(generateUid));
+        return items.map((it, i)=>_object_spread_props(_object_spread({}, it), 
{
+                _uid: uids[i]
+            }));
+    })();
+}
+function isIgnorableHighlightToken(token) {
+    const ignoreChars = new Set([
+        ',',
+        '.',
+        ';',
+        ':',
+        '(',
+        ')',
+        '{',
+        '}',
+        '[',
+        ']',
+        '+',
+        '-',
+        '*',
+        '/',
+        '=',
+        '<',
+        '>',
+        '!',
+        '?',
+        '|',
+        '&',
+        '%',
+        '^',
+        '$',
+        '#',
+        '@',
+        '~',
+        '`',
+        '\\',
+        "'",
+        '"'
+    ]);
+    // 全是空格或换行
+    if (!token.trim()) {
+        return true;
+    }
+    // 单个字符且在 ignoreChars 中
+    if (token.length === 1 && ignoreChars.has(token)) {
+        return true;
+    }
+    // 多个字符但全是标点符号
+    if 
(/^[\u2000-\u206F\u2E00-\u2E7F!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]+$/.test(token))
 {
+        return true;
+    }
+    return false;
+}
+function trimSpacesAroundEquals(str) {
+    // 去掉等于号两边所有空格
+    return str.replace(/\s*=\s*/g, '=');
+}
+
+
+/***/ }),
+
+/***/ 8882:
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   AZ: () => (/* binding */ currentTraceTableAtom),
+/* harmony export */   E: () => (/* binding */ tracesServicesAtom),
+/* harmony export */   VA: () => (/* binding */ traceOperationsAtom),
+/* harmony export */   fy: () => (/* binding */ currentSortAtom),
+/* harmony export */   gL: () => (/* binding */ currentServiceAtom),
+/* harmony export */   jB: () => (/* binding */ tagsAtom),
+/* harmony export */   mH: () => (/* binding */ currentOperationAtom),
+/* harmony export */   oC: () => (/* binding */ minDurationAtom),
+/* harmony export */   ok: () => (/* binding */ tracesAtom),
+/* harmony export */   uS: () => (/* binding */ maxDurationAtom)
+/* harmony export */ });
+/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = 
__webpack_require__(2560);
+/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_1__ = 
__webpack_require__(1750);
+
+
+const currentTraceTableAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)('');
+const currentServiceAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)(_constants__WEBPACK_IMPORTED_MODULE_0__/* .DEFAULT_SERVICE */ .aR);
+const currentOperationAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)(_constants__WEBPACK_IMPORTED_MODULE_0__/* .DEFAULT_OPERATION */ .UB);
+const currentSortAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)('most-recent');
+const tagsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ .eU)('');
+const tracesAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ .eU)([]);
+const tracesServicesAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)([]);
+const traceOperationsAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)([]);
+const minDurationAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)('');
+const maxDurationAtom = (0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ 
.eU)('');
+
+
+/***/ })
+
+}]);
+//# sourceMappingURL=659.js.map?_cache=6b87f40f0978b23bc2bf
\ No newline at end of file
diff --git a/src/grafana/plugins/doris-app/659.js.map 
b/src/grafana/plugins/doris-app/659.js.map
new file mode 100644
index 0000000..fb74dae
--- /dev/null
+++ b/src/grafana/plugins/doris-app/659.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"659.js?_cache=6b87f40f0978b23bc2bf","mappings":";;;;;;;;;;;;;;;;;;AAQA,oBAAoB;AACb,SAASA,sBAAsBC,MAA8B;IAChE,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAE,GAAGH;IAEtC,MAAMI,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2CN,EAAED,SAAS,GAAG,EAAEF,MAAM;wBACT,EAAEC,SAAS;IAC/B,CAAC;IAED,OAAOE;AACX;AAEA,SAASC,cAAcC,KAAc;IACjC,IAAI,CAACA,OAAO;QACR,OAAO;IACX;IAEA,IAAIA,MAAMC,QAAQ,CAAC,OAAO;QACtB,OAAOC,WAAWF,MAAMG,OAAO,CAAC,MAAM;IAC1C,OAAO,IAAIH,MAAMC,QAAQ,CAAC,OAAO;QAC7
 [...]
\ No newline at end of file
diff --git a/src/grafana/plugins/doris-app/824.js 
b/src/grafana/plugins/doris-app/824.js
index 8f003d5..34b5146 100644
--- a/src/grafana/plugins/doris-app/824.js
+++ b/src/grafana/plugins/doris-app/824.js
@@ -1,6 +1,7 @@
 "use strict";
 (self["webpackChunkdoris_app"] = self["webpackChunkdoris_app"] || 
[]).push([[824],{
 
+<<<<<<< Updated upstream
 /***/ 4338:
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
@@ -362,6 +363,8 @@ function getOperationListService(payload) {
 
 /***/ }),
 
+=======
+>>>>>>> Stashed changes
 /***/ 6824:
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
@@ -1721,6 +1724,7 @@ function PageTrace() {
 }
 
 
+<<<<<<< Updated upstream
 /***/ }),
 
 /***/ 7273:
@@ -1910,4 +1914,10 @@ const maxDurationAtom = 
(0,jotai__WEBPACK_IMPORTED_MODULE_1__/* .atom */ .eU)(''
 /***/ })
 
 }]);
-//# sourceMappingURL=824.js.map?_cache=e8f8a0725ff96ada56e3
\ No newline at end of file
+//# sourceMappingURL=824.js.map?_cache=e8f8a0725ff96ada56e3
+=======
+/***/ })
+
+}]);
+//# sourceMappingURL=824.js.map?_cache=82f7b759265fefdd1d12
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/824.js.map 
b/src/grafana/plugins/doris-app/824.js.map
index c613ff6..6d9fbb8 100644
--- a/src/grafana/plugins/doris-app/824.js.map
+++ b/src/grafana/plugins/doris-app/824.js.map
@@ -1 +1,5 @@
-{"version":3,"file":"824.js?_cache=e8f8a0725ff96ada56e3","mappings":";;;;;;;;;;;;;;;;;;AAQA,oBAAoB;AACb,SAASA,sBAAsBC,MAA8B;IAChE,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAE,GAAGH;IAEtC,MAAMI,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2CN,EAAED,SAAS,GAAG,EAAEF,MAAM;wBACT,EAAEC,SAAS;IAC/B,CAAC;IAED,OAAOE;AACX;AAEA,SAASC,cAAcC,KAAc;IACjC,IAAI,CAACA,OAAO;QACR,OAAO;IACX;IAEA,IAAIA,MAAMC,QAAQ,CAAC,OAAO;QACtB,OAAOC,WAAWF,MAAMG,OAAO,CAAC,MAAM;IAC1C,OAAO,IAAIH,MAAMC,QAAQ,CAAC,OAAO;QAC7
 [...]
\ No newline at end of file
+<<<<<<< Updated upstream
+{"version":3,"file":"824.js?_cache=e8f8a0725ff96ada56e3","mappings":";;;;;;;;;;;;;;;;;;AAQA,oBAAoB;AACb,SAASA,sBAAsBC,MAA8B;IAChE,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAE,GAAGH;IAEtC,MAAMI,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2CN,EAAED,SAAS,GAAG,EAAEF,MAAM;wBACT,EAAEC,SAAS;IAC/B,CAAC;IAED,OAAOE;AACX;AAEA,SAASC,cAAcC,KAAc;IACjC,IAAI,CAACA,OAAO;QACR,OAAO;IACX;IAEA,IAAIA,MAAMC,QAAQ,CAAC,OAAO;QACtB,OAAOC,WAAWF,MAAMG,OAAO,CAAC,MAAM;IAC1C,OAAO,IAAIH,MAAMC,QAAQ,CAAC,OAAO;QAC7
 [...]
+=======
+{"version":3,"file":"824.js?_cache=82f7b759265fefdd1d12","mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAE6E;AAC7E;;;AC5BA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEwC;AACxC;;;ACpBA;AACA;AACA;AACA;AACA;AACA;;AAEkD;AACK;AACW;;AAElE,aAAa,8BAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,UAAU,iCAAa;AAC1B;AACA;AACA;AACA,SAA
 [...]
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/CHANGELOG.md 
b/src/grafana/plugins/doris-app/CHANGELOG.md
index 2471ca3..6a8a915 100644
--- a/src/grafana/plugins/doris-app/CHANGELOG.md
+++ b/src/grafana/plugins/doris-app/CHANGELOG.md
@@ -1,5 +1,14 @@
 # Changelog
 
+<<<<<<< Updated upstream
+=======
+## 
[1.0.1-alpha.2](https://github.com/jeffreys-cat/grafana-doris-app/compare/v1.0.1-alpha.1...v1.0.1-alpha.2)
 (2026-02-04)
+
+### 🎫 Chores
+
+* update author name 
([b6cd8d1](https://github.com/jeffreys-cat/grafana-doris-app/commit/b6cd8d1e79576bcbc919b2285eae3f9a5b4403aa))
+
+>>>>>>> Stashed changes
 ## 
[1.0.1-alpha.1](https://github.com/jeffreys-cat/grafana-doris-app/compare/v1.0.0-alpha.1...v1.0.1-alpha.1)
 (2026-02-02)
 
 ## 1.0.0-alpha.1 (2026-02-02)
diff --git a/src/grafana/plugins/doris-app/module.js 
b/src/grafana/plugins/doris-app/module.js
index 2436ba3..fe0b900 100644
--- a/src/grafana/plugins/doris-app/module.js
+++ b/src/grafana/plugins/doris-app/module.js
@@ -1194,7 +1194,11 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__9089__;
 /******/               // This function allow to reference async chunks
 /******/               __webpack_require__.u = (chunkId) => {
 /******/                       // return url for filenames based on template
+<<<<<<< Updated upstream
 /******/                       return "" + chunkId + ".js?_cache=" + 
{"20":"4c9e61c25e362f70cef3","42":"f3f97468bc0710881fb5","170":"1756191b88d71217efc9","273":"e9f92c7627444f872189","382":"45ca3c194995374286b8","439":"731b5943bdc7c1368ebd","572":"18987f5f848d0eef4595","680":"05e6691eb2d1fe3a4df9","824":"e8f8a0725ff96ada56e3"}[chunkId]
 + "";
+=======
+/******/                       return "" + chunkId + ".js?_cache=" + 
{"20":"4c9e61c25e362f70cef3","42":"dad0c51d1ead9b168bd4","170":"1756191b88d71217efc9","273":"e9f92c7627444f872189","382":"08e0206326f2c926fed2","439":"bd08506ba880e5929bd3","572":"18987f5f848d0eef4595","659":"6b87f40f0978b23bc2bf","680":"05e6691eb2d1fe3a4df9","824":"82f7b759265fefdd1d12"}[chunkId]
 + "";
+>>>>>>> Stashed changes
 /******/               };
 /******/       })();
 /******/       
@@ -1283,7 +1287,11 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__9089__;
 /******/       
 /******/       /* webpack/runtime/compat */
 /******/       
+<<<<<<< Updated upstream
 /******/       __webpack_require__.sriHashes = 
{"20":"sha256-tZK/hhnSbow5KIpPECOg1rp4T1B7QjJRfcpXXf5zFE0=","42":"sha256-ZWPDmhuei67WXB9vZTnS3RNki2gucTomFwxm8UnJsik=","170":"sha256-yGVQfSvxGKmJ2RZi10juUeor95eXXO0+9u+/fTs0zlA=","273":"sha256-mw2eatnfiYTslOQm71RJYNEsp0Sk+J+agaLmkanvobA=","382":"sha256-WCDT20f/28bJ4iTgV8/4vnfSoUGN0oSDL3rFTVMUqGU=","439":"sha256-ft+BhLwRyOzr5mqwKDKxR/JfcERH6aT7kpXwr7kEp1M=","572":"sha256-Yt8baAsWEPnM/qGgb6UAIsWoBrGmEX7uQHuzHWi2Rbo=","680":"sha256-5bWt9FqS28JCY4PED
 [...]
+=======
+/******/       __webpack_require__.sriHashes = 
{"20":"sha256-tZK/hhnSbow5KIpPECOg1rp4T1B7QjJRfcpXXf5zFE0=","42":"sha256-nzgeakQIWgz8aa7RF8oJyGt85hIx2A6ANWhlQtWz7wY=","170":"sha256-yGVQfSvxGKmJ2RZi10juUeor95eXXO0+9u+/fTs0zlA=","273":"sha256-mw2eatnfiYTslOQm71RJYNEsp0Sk+J+agaLmkanvobA=","382":"sha256-X/fowxSGfrZ4l1ou0L2JAGJ/GPxJ/wcq/0zLBYdp9U8=","439":"sha256-JeiLIC4FLQvxbmrXjGzk/JwQYqUvIL+iQqRVyE5+pnY=","572":"sha256-Yt8baAsWEPnM/qGgb6UAIsWoBrGmEX7uQHuzHWi2Rbo=","659":"sha256-cL5hVc4mjGim9Qrjv
 [...]
+>>>>>>> Stashed changes
 /******/       
 /******/       /* webpack/runtime/jsonp chunk loading */
 /******/       (() => {
diff --git a/src/grafana/plugins/doris-app/module.js.map 
b/src/grafana/plugins/doris-app/module.js.map
index c4846c0..7c98e2f 100644
--- a/src/grafana/plugins/doris-app/module.js.map
+++ b/src/grafana/plugins/doris-app/module.js.map
@@ -1 +1,5 @@
-{"version":3,"file":"module.js","mappings":";;;;;;;AAAA,eAAe,KAAoD,oBAAoB,CAA+G,CAAC,kBAAkB,aAAa,wJAAwJ,EAAE,UAAU,IAAI,WAAW,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,IAAI,iCAAiC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,uNAAuN,oCAAoC,4CAA4C,mBAAmB,gBAAgB,yDAAyD,IAAI,kBAAkB,6DAA6D,+CAA+C,mBAAmB,mCAAmC,8GAA8G,mCAAmC,eAAe,yCAAyC,eAAe,OAAO,yCAAyC,kDAAkD,eAAe,mBAAmB,aAAa,OAAO,qCAAqC,oCAAoC,qBAAqB,MAAM,eAAe,uBAAuB,sBAAsB,4BAA4B,mBAAmB,iCAAiC,KAAK,aAAa,WAAW,4
 [...]
\ No newline at end of file
+<<<<<<< Updated upstream
+{"version":3,"file":"module.js","mappings":";;;;;;;AAAA,eAAe,KAAoD,oBAAoB,CAA+G,CAAC,kBAAkB,aAAa,wJAAwJ,EAAE,UAAU,IAAI,WAAW,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,IAAI,iCAAiC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,uNAAuN,oCAAoC,4CAA4C,mBAAmB,gBAAgB,yDAAyD,IAAI,kBAAkB,6DAA6D,+CAA+C,mBAAmB,mCAAmC,8GAA8G,mCAAmC,eAAe,yCAAyC,eAAe,OAAO,yCAAyC,kDAAkD,eAAe,mBAAmB,aAAa,OAAO,qCAAqC,oCAAoC,qBAAqB,MAAM,eAAe,uBAAuB,sBAAsB,4BAA4B,mBAAmB,iCAAiC,KAAK,aAAa,WAAW,4
 [...]
+=======
+{"version":3,"file":"module.js","mappings":";;;;;;;AAAA,eAAe,KAAoD,oBAAoB,CAA+G,CAAC,kBAAkB,aAAa,wJAAwJ,EAAE,UAAU,IAAI,WAAW,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,IAAI,iCAAiC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,uNAAuN,oCAAoC,4CAA4C,mBAAmB,gBAAgB,yDAAyD,IAAI,kBAAkB,6DAA6D,+CAA+C,mBAAmB,mCAAmC,8GAA8G,mCAAmC,eAAe,yCAAyC,eAAe,OAAO,yCAAyC,kDAAkD,eAAe,mBAAmB,aAAa,OAAO,qCAAqC,oCAAoC,qBAAqB,MAAM,eAAe,uBAAuB,sBAAsB,4BAA4B,mBAAmB,iCAAiC,KAAK,aAAa,WAAW,4
 [...]
+>>>>>>> Stashed changes
diff --git a/src/grafana/plugins/doris-app/plugin.json 
b/src/grafana/plugins/doris-app/plugin.json
index df37f2a..7d42339 100644
--- a/src/grafana/plugins/doris-app/plugin.json
+++ b/src/grafana/plugins/doris-app/plugin.json
@@ -11,15 +11,20 @@
         ],
         "description": "",
         "author": {
-            "name": "SelectDB"
+            "name": "VeloDB"
         },
         "logos": {
             "small": "img/logo.svg",
             "large": "img/logo.svg"
         },
         "screenshots": [],
+<<<<<<< Updated upstream
         "version": "1.0.1-alpha.1",
         "updated": "2026-02-02"
+=======
+        "version": "1.0.1-alpha.2",
+        "updated": "2026-02-04"
+>>>>>>> Stashed changes
     },
     "includes": [
         {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to