* Datasource test: fix describe nesting
* Parsing: export handleQuotes function
* Modify query: add functions to detect the presence of a label and remove it
* Loki: add support to toggle filters if already present
* Datasource test: fix describe nesting
* Loki: add support to toggle filter out if present
* Remove label: handle escaped values
* Datasource: add test case for escaped label values
* Loki: remove = filter when applying !=
* Remove selector: add support for Selector node being far from Matcher
* Modify query: add unit tests
* Elasticsearch: create modifyQuery for elastic
* Elastic modify query: implement functions
* Elasticsearch: implement modifyQuery functions in datasource
* Elasticsearch: update datasource test
* Loki modify query: check for streamSelectorPositions length
* Elasticsearch query has filter: escape filter value in regex
* Remove unused type
* Modify query: add functions to detect the presence of a label and remove it
* Remove label: handle escaped values
* Logs: create props to check for label filters in the query
* Log Details Row: use label state props to show visual feedback
* Make isCallbacks async
* Explore: add placeholder for checking for filter in query
* Datasource: define new API method
* Inspect query: add base implementation
* Remove isFilterOutLabelActive as it will not be needed
* Check for "isActive" on every render
Otherwise the active state will be out of sync
* Elasticsearch: implement inspectQuery in the datasource
* Logs: update test
* Log details: update test
* Datasources: update tests
* Inspect query: rename to analize query to prevent confusion
* Datasource types: mark method as alpha
* Explore: add comment to log-specific functions
* Remove duplicated code from bad rebase
* Remove label filter: check node type
* getMatchersWithFilter: rename argument
* Fix bad rebase
* Create DataSourceWithQueryManipulationSupport interface
* Implement type guard for DataSourceWithQueryManipulationSupport
* DataSourceWithQueryManipulationSupport: move to logs module
* hasQueryManipulationSupport: change implementation
`modifyQuery` comes from the prototype.
* DataSourceWithQueryManipulationSupport: expand code comments
* AnalyzeQueryOptions: move to logs module
* DataSourceWithQueryManipulationSupport: add support for more return types
* Fix merge error
* Update packages/grafana-data/src/types/logs.ts
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* DatasourceAPI: deprecate modifyQuery
* Explore: refactor isFilterLabelActive
* DataSourceWithQueryModificationSupport: rename interface
* Split interfaces into Analyze and Modify
* Query analysis: better name for interface
* Fix guard
* Create feature flag for active state
* Use new feature flag in Explore
* DataSourceToggleableQueryFiltersSupport: create a specific interface for this feature
* Rename feature flag
* De-deprecate modifyQuery
* DataSourceToggleableQueryFiltersSupport: Rethink types and methods
* Explore: adjust modifyQuery and isFilterLabelActive to new methods
* Loki: implement new interface and revert modifyQuery
* DataSourceToggleableQueryFiltersSupport: better name for arguments
* Elasticsearch: implement new interface and revert modifyQuery
* Loki: better name for arguments
* Explore: document current limitation on isFilterLabelActive
* Explore: place toggleable filters under feature flag
* Loki: add tests for the new methods
* Loki: add legacy modifyQuery tests
* Elasticsearch: add tests for the new methods
* Elasticsearch: add legacy modifyQuery tests
* Toggle filter action: improve type values
* Logs types: update interface description
* DataSourceWithToggleableQueryFiltersSupport: update interface name
* Update feature flag description
* Explore: add todo comment for isFilterLabelActive
---------
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* Log row menu: refactor visibility
* LogRowMenuCell: display if mouse over or pinned
* LogRowMenuCell: use unique wrapper for all buttons
* Revert to using table row as position reference
* Log row message: update test
* Fix tests
* LogRow: handle mouse over behavior
* Elasticsearch: add additional settings section
* Remove extra lines
* Elastic config: add divider between name and http settings
* Data links: fix subsection title
* Remove unused import
* Datasource test: fix describe nesting
* Parsing: export handleQuotes function
* Modify query: add functions to detect the presence of a label and remove it
* Loki: add support to toggle filters if already present
* Datasource test: fix describe nesting
* Loki: add support to toggle filter out if present
* Remove label: handle escaped values
* Datasource: add test case for escaped label values
* Loki: remove = filter when applying !=
* Remove selector: add support for Selector node being far from Matcher
* Modify query: add unit tests
* Elasticsearch: create modifyQuery for elastic
* Elastic modify query: implement functions
* Elasticsearch: implement modifyQuery functions in datasource
* Elasticsearch: update datasource test
* Loki modify query: check for streamSelectorPositions length
* Elasticsearch query has filter: escape filter value in regex
* Remove unused type
* Modify query: use query modeller instance from module
* Query utils: refactor isQueryPipelineErrorFiltering and getLogQueryFromMetricsQuery
* Query utils: refactor isQueryWithRangeVariable and getHighlighterExpressionsFromQuery
* Get parser: return log expression even if no pipelineExpr is present
* Update tests
* Elasticsearch: remove usages of any
* Elasticsearch: check for filter type when accessing field aggs
* Elasticsearch: use type guards instead of checking types
* Use unknown for isPrimitive function
* Add deprecation notice
* Remove unused type
* Fix bug in "isPrimitive" function
* Remove unused import
* Revert "Fix bug in "isPrimitive" function"
This reverts commit 27f9874cce.
* Query utils: add function to identify distinct queries
* Chore: return false when the expected node is found
* Query splitting: exclude distinct queries from splitting
* Group queries excluded from splitting
* Log row: use clipboard button component for copy log button
* Copy log: adjust button styles to match
* Define line height
* Slightly improve line height
* Logs: add reference to the start of the logs
* Logs: Improve pagination by scrolling to the first log
* Logs: move first log ref
* Logs navigation: reset scroll on page changes
* Update tests
* Logs navigation: unify reference to start of logs for scrolling to top
* Chore: update test title
* Move scrolling reference a bit more to the top
* Update chunking mentions in the code and ui
* Rename files and exported functions
* Rename configuration attribute
* Rename grouped querying function name
* Update more function names
* Update unit test
* Update unit tests
* More renames
* Rename time splitting functions
* Logs Volume: identify timeouts and provide remediation action
* Supplementary result error: refactor updated component API
* Create helper to identify timeout errors
* Update timeout identifying function
* Add unit test
* Update panel unit test
* Update public/app/features/explore/utils/logsVolumeResponse.ts
Co-authored-by: Giordano Ricci <me@giordanoricci.com>
* Use some instead of reduce
* Change alert type to info
* Add comment
* Remove unnecessary optional chaining
* Remove unnecessary condition
* Remove unnecessary wrapping arrow function
---------
Co-authored-by: Giordano Ricci <me@giordanoricci.com>
Logs sample: use the selected time range in sample request
There are parts of the query, such as label values, that could only be present during the current selected time interval. If we request using a time range other than the selected one, we are not providing builder suggestions based on the same data that the user is seeing.
* Rename splitting files to chunking
* Rename time chunking functions
* Move response functions to response utils
* Remove some blank spaces
* Add an extra test case for frame refIds and names
* Range splitting: allow splits larger than 30 days while keeping the fail safe
* Remove limit
* Fix test
* Remove unnecessary try/catch
* Remove unused export
* Query splitting: enable instant queries
* Range splitting: send instant queries as another request group
* Range splitting: increase grouped splitted requests stability
We were defaulting to the `0` index as the first group for the next request batch, but there was no guarantee that the group `0` had a `.partition` entry for `requestN-1`. Now we find the first defined and use that index as the next starting group.
* Range splitting: update unit test
* Range splitting: group metric and logs queries
* Range splitting: intercalate logs and metric queries when > 1 queries
* Range splitting: fix possibly undefined error and remove console log
* Range splitting: update test imports
* Range splitting: add unit tests for multiple queries
* Query splitting: use lodash partition function
* Chore: rename variable
* Chore: attempt to improve readability
* Range splitting: range splitting function
* Range splitting: experiment with 1 hour splits
* Range splitting: reorganize code
* Range splitting: improve code readability and meaning
* Range splitting: add partition limit to prevent infinite loops
* Range splitting: add error handling
* Range splitting: disable for logs queries
* Range splitting: support any arbitrary time splitting + respect original from/to in the partition
* Chore: remove console logs
* Chore: delete unused import
* Range splitting: actually send requests in sequence
* Range splitting: do not split when > 1 query
* Range splitting: combine frames
* Chore: rename function
* split in reverse
* polished reversing
* keep reference to the right frame in the result
* Range splitting: change request state to Streaming
* Range splitting: fix moving only 1 unit of time instead of the provided one
* Chore: change default parameter to timeShift = 1
* Range splitting: do not split for range queqries
* Range splitting: add initial support for log queries
* Range splitting: do not use MutableDataFrame
It has bad performance and it's not required
* Chore: remove unused export
* Query Splitting: move to module
* loki: split: fix off-by-one error (#62966)
loki: split: fix off-by-one loop
* Range splitting: disable for logs volume queries
* Range splitting: combine any number of fields, not just hardcoded 2
* Range splitting: optimize frame-combining function
* Range splitting: further optimize
* Range splitting: combine frame length
* Range splitting: combine stats
* Range splitting: combine stats without assuming the same order
* Query splitting: catch and raise errors
* Range splitting: create feature flag
* Range splitting: implement feature flag
* Range splitting: add unit test for datasource query
* Range splitting: add basic test for runPartitionedQuery
* Range splitting: add unit test for resultLimitReached
* Range splitting: test frame merging
* Chore: fix unit test
---------
Co-authored-by: Sven Grossmann <svennergr@gmail.com>
Co-authored-by: Gábor Farkas <gabor.farkas@gmail.com>
* fix(auto-size-input): return maxWidth when realWidth exceeds limit
* fix(query-builder): sex madWidth for simple editor component
* fix(auto-size-input): add unit test
* Logs A11y: Support keyboard interactions with log lines
* LogRowMessage: specify text align
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* Chore: refactor test to improve internal categorization of scenarios
* feat(loki-monaco-unwrap): add unwrap situation support
* Chore: remove redundant path from aggregation situation
* feat(loki-monaco-unwrap): add unwrap suggestions
* feat(loki-monaco-autocomplete): rename IN_DURATION and add missing tests
* feat(loki-monaco-autocomplete): detect parser and line filter
* feat(loki-monaco-autocomplete): optionally suggest line filters and parsers
* feat(loki-monaco-autocomplete): improve suggestions and update completions tests
* feat(loki-monaco-autocomplete): allow for multiple line filters suggestions
* Chore: update situations test
* Chore: add test case for AFTER_UNWRAP completion
* feat(loki-monaco-autocomplete): use logs query instead of labels for data sample
* Chore: improve getParser function name and add tests
* Chore: update test mock data
* Update public/app/plugins/datasource/loki/components/monaco-query-field/monaco-completion-provider/situation.test.ts
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* feat(loki-monaco-autocomplete): improve after unwrap detection
* feat(loki-monaco-autocomplete): remove leftover parser detection
* Chore: completely remove parser suggestion exclusion implementation
It was correct to have more than one parser, so we don't need to exclude parsers if one is present.
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* feat(loki-monaco-editor): update e2e test with autocomplete steps
* Chore: replace typing method
* Test simpler POC test
* Chore: refactor test
* Chore: use selector to get the editor value
* feat(loki-monaco-editor): update tests
* chore(loki): use unified datasource mock function in tests
* chore: enable monaco feature flag in tests
* feat(loki-monaco-editor): add test case for disabled feature
* feat(loki-monaco-editor): enable by default
* Revert "feat(loki-monaco-editor): enable by default"
This reverts commit 08904f94a707a4fa32aa1e7f3f0de377575a7636.
* feat(loki-monaco-editor): enable from registry
* feat(loki-monaco-editor): make feature flag frontend only
* loki: switch to a monaco-based query field, step 1 (#46291)
* loki: use monaco-logql (#46318)
* loki: use monaco-logql
* updated monaco-logql
* fix all the tests (#46327)
* loki: recommend parser (#46362)
* loki: recommend parser
* additional improvements
* more improvements
* type and lint fixes
* more improvements
* trigger autocomplete on focus
* rename
* loki: more smart features (#46414)
* loki: more smart features
* loki: updated syntax-highlight version
* better explanation (#46443)
* better explanation
* improved help-text
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* Fix label
* feat(loki-monaco-editor): add monaco-logql as a dependency
* feat(loki-monaco-editor): add back range function removed during merge
* feat(loki-monaco-editor): sync imports with recent changes
* feat(loki-monaco-editor): add missing lang provider functions
* feat(loki-monaco-editor): fix imports
* feat(loki-monaco-editor): display monaco editor by default
Temporarily
* Chore: remove commented code
* Chore: minor refactor to NeverCaseError
* Chore: minor code cleanups
* feat(loki-monaco-editor): add history implementation
Will see how it behaves and base the history slicing on tangible feedback
* feat(loki-monaco-editor): turn completion data provider into a class
* Chore: fix missing imports
* feat(loki-monaco-editor): refactor data provider methods
Move complexity scattered everywhere to the provider
* Chore: clean up redundant code
* Chore: minor comments cleanup
* Chore: simplify override services
* Chore: rename callback
* feat(loki-monaco-editor): use query hints implementation to parse expression
* feat(loki-monaco-editor): improve function name
* Chore: remove superfluous variable in favor of destructuring
* Chore: remove unused imports
* Chore: make method async
* feat(loki-monaco-editor): fix deprecations and errors in situation
* feat(loki-monaco-editor): comment failing test case
* Chore: remove comment from test
* Chore: remove duplicated completion item
* Chore: fix linting issues
* Chore: update language provider test
* Chore: update datasource test
* feat(loki-monaco-editor): create feature flag
* feat(loki-monaco-editor): place the editor under a feature flag
* Chore: add completion unit test
* Chore: add completion data provider test
* Chore: remove unwanted export
* Chore: remove unused export
* Chore(loki-query-field): destructure all props
* chore(loki-completions): remove odd string
* fix(loki-completions): remove rate_interval
Not supported
* fix(loki-completions): remove line filters for after pipe case
We shouldn't offer line filters if we are after first pipe.
* refactor(loki-datasource): update default parameter
* fix(loki-syntax): remove outdated documentation
* Update capitalization in pkg/services/featuremgmt/registry.go
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* refactor(situation): use node types instead of names
* Chore: comment line filters pending implementation
It's breaking the build due to a linting error.
* Chore: update feature flag test after capitalization change
* Revert "fix(loki-completions): remove line filters for after pipe case"
This reverts commit 3d003ca4bc.
* Revert "Chore: comment line filters pending implementation"
This reverts commit 84bfe76a6a.
Co-authored-by: Gábor Farkas <gabor.farkas@gmail.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Ivana Huckova <ivana.huckova@gmail.com>
* feat(loki-variable-query-support): refactor datasource to support legacy and new variable query format
* Chore: fix comment
* Chore: use internal method to interpolate strings
* Chore: revert removed changes
* Chore: update test
* feat(loki-variable-editor): replace input with select with datasource labels
* feat(loki-variable-editor): update test
* feat(loki-variable-editor): allow the editor to receive an existing query instance and edit it
* feat(loki-variable-editor): allow custom values in the label select
* feat(loki-variable-editor): mark stream field as optional
* feat(loki-variable-editor): add placeholder to stream selector and extend tooltip info
* refactor(elastic-test): add datasource mock factory
* refactor(elastic-test): use new factory and attempt to fix some type issues
* refactor(elastic-test): type fixes
* refactor(elastic-test): update test with mock changes
* refactor(elastic-test): remove commented code
Git history should be more than enough to go back to previous revisions instead of keeping commented code.
* refactor(elastic-test): use mock factory and fix type issues in language provider test
* Chore: rename mock parameter
* Chore: remove unnecessary conditional
* Chore: remove ts-expect-error
* feat(loki-query-editor): create base editor component
* feat(loki-query-editor): update editor to use loki query type
* feat(loki-query-editor): add custom variable support to datasource
* feat(loki-query-editor): prevent errors when no label is present
* Add unit test for LokiMetricFindQuery
* Update datasource test
* Add component test
* Add variable query migration support
* feat(loki-query-editor): add migration support for older-format variables
* Fix enum capitalization for consistency
* Move attribute to the top of the class
* Remove unnecessary from()
* Update capitalization of new enum
* Fix enum capitalization in component
* feat(loki-query-editor): replace unnecessary class with class method
* refactor(loki-test): move mock creation to mock module
* refactor(loki-test): allow to pass custom settings to the mock constructor
* refactor(loki-test): refactor mock factory in datasource test
* refactor(loki-test): revert change in undefined test case for dsMaxLines
* refactor(loki-test): move type assertion to mock definition
* refactor(loki-test): fix more type issues
* refactor(loki-explore-query-editor): refactor test to use createLokiDatasource() and fix type issues
* refactor(loki-test): replace makeMockLokiDatasource with metadataRequest factory
* fix: remove any
* fix(loki-test): fix remaining usages of any
* Fix: add missing exported type
* refactor(loki): use Loki parser in getHighlighterExpressionsFromQuery
* fix(highlighter): update regex to properly identify term quotes
* refactor(highlighter): determine quote type by string comparison
* Chore: remove empty line
* Chore: add missing refId property to LokiQuery type
* Chore: fix types in Loki querybuilder state test
* Chore: remove unnecessary added property to LokiQuery