* LogRowMessage: strip new lines when wrapping is disabled
* LogRowMessage: prevent conflicts between failed json parsing and unwrapping
* LogRowMessage: expand multi-line unwrapped logs when opening details
* Add unit test
* Prettier
* chore: update comment
* LogLabels: create specialized component for arrays of labels
* Logs: sort displayed fields when assigning to state
* LogsMetaRow: fix types and use specialized components
* LogLabels: show label and value
* LogsPanel: update common labels
* LogsMetaRow: use LogsLabelsList
* Update unit tests
* Formatting
* Update betterer
* Prettier
* Logs panel: update test
* LogLabels: add actual tooltip
* Logs: remove sorting of displayed fields
* getAllFields: refactor for improved performance
* LogRowMessageDisplayedFields: refactor line construction for performance
* AsyncIconButton: refactor to prevent infinite loops
* Infinite Scroll: wait for users to reach the top before triggering new requests
* Prettier
* Infinite Scroll: control top scrolling via prop
* Prettier
* PopoverMenu: change position to fixed
* PopoverMenu: close on empty selectionchange
* Popover Menu: do not let menu overflow the window dimensions
* Prettier
* Infinite scroll: clean up for clarity
* Infinite scroll: clean up test
* Formatting
* Infinite scroll: disable by feature flag
* Infinite scroll: improve visibility of the lower loader
* Supplementary queries: add support for providers returning a request instance
* Formatting
* DataSourceWithSupplementaryQueriesSupport: update getDataProvider signature
* getLogLevelFromLabels: fix buggy implementation
* getLogLevelFromKey: fix key type
Why number??
* Revert "getLogLevelFromKey: fix key type"
This reverts commit 14a95298a6f803cc3270e0421b2e04dd0d65f131.
* getSupplementaryQueryProvider: remove observable support
* Datasources: remove unnecessary check
The switch is doing the same job
* Supplementary queries: update unit test
* datasource_srv: sync mock with real api
* Formatting
* Supplementary queries: pass targets from getSupplementaryQueryProvider
* LogsVolumeQueryOptions: remove range and make extract level optional
* logsModel: add missing range to test data
* query: sync tests with changes
* Formatting
* DataSourceWithSupplementaryQueriesSupport: update interface with deprecated and new methods
* DataSourceWithSupplementaryQueriesSupport: sync Loki and Elasticsearch
* queryLogsVolume: extractLevel no longer customizable
* Loki: update test
* Supplementary queries: add support for the new method
* hasSupplementaryQuerySupport: update signature
* Formatting
* Betterer
* Query: update test
* Supplementary queries: add test for the legacy API
* Update public/app/features/explore/utils/supplementaryQueries.ts
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
---------
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* Infinite scroll: exclude visible range from new requests
* Infinite scroll: revert skipping 1 millisecond on new requests
* Formatting
* Logs models: filter exact duplicates in the response
* mergeDataSeries: do not mutate currentData
* runMoreLogsQueries: return queryResponse while loading
* Infinite scrolling: use special refId for infinite scrolling queries
* Remove log
* Update public/app/features/logs/logsModel.ts
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* combinePanelData: refactor and add unit test
* logsModel: export infinite scroll refid
* Formatting
* logsModel: add deduplication unit test
* Formatting
* findMatchingRow: add unit test
* Fix test title
* Fix imports order
---------
Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
* Explore: propose action, thunk, and decorators for load more
* LogsContainer: add loadMore method
* Query: remove unused var
* Loading more: use navigation to simulate scrolling
* Explore: figure out data combination
* Fix imports
* Explore: deduplicate results when using query splitting
* LogsNavigation: add scroll behavior
* Remove old code
* Scroll: adjust delta value
* Load more: remove refIds from signature
We can resolve them inside Explore state
* Load more: rename to loadMoreLogs
* Infinite scrolling: use scrollElement to listen to scrolling events
* Explore logs: add fixed height to scrollable logs container
* Logs: make logs container the scrolling element
* Logs: remove dynamic logs container size
It works very well with 1 query, but breaks with more than 1 query or when Logs is not the last rendered panel
* Logs navigation: revert changes
* Infinite scroll: create component
* Infinite scroll: refactor and clean up effect
* Infinite scroll: support oldest first scrolling direction
* Infinite scroll: support loading oldest logs in ascending and descending order
* Infinite scroll: use scroll to top from logs navigation
* Logs: make logs container smaller
* Logs: make container smaller
* State: integrate explore's loading states
* Infinite scroll: add loading to effect dependency array
* Infinite scroll: display message when scroll limit is reached
* Infinite scroll: add support to scroll in both directions
* Infinite scroll: capture wheel events for top scroll
* scrollableLogsContainer: deprecate in favor of logsInfiniteScrolling
* Infinite scroll: implement timerange limits
* Infinite scroll: pass timezone
* Fix unused variables and imports
* Infinite scroll: implement timerange limits for absolute time
* Infinite scroll: fix timerange limits for absolute and relative times
* Infinite scroll: reset out-of-bounds message
* Logs: make container taller
* Line limit: use "displayed" instead of "returned" for infinite scrolling
* Infinite scrolling: disable behavior when there is no scroll
* Remove console log
* Infinite scroll: hide limit reached message when using relative time
* Logs: migrate styles to object notation
* Prettier formatting
* LogsModel: fix import order
* Update betterer.results
* Logs: remove exploreScrollableLogsContainer test
* Infinite scroll: display loader
* Infinite scroll: improve wheel handling
* Explore: unify correlations code
* Explore: move new function to helpers
* Remove comment
* Fix imports
* Formatting
* Query: add missing awaits in unit test
* Logs model: add unit test
* Combine frames: move code to feature/logs
* Explore: move getCorrelations call back to query
It was causing a weird test failure
* Fix imports
* Infinite scroll: parametrize scrolling threshold
* Logs: fix overflow css
* Infinite scroll: add basic unit test
* Infinite scroll: add unit test for absolute time ranges
* Formatting
* Explore query: add custom interaction for scrolling
* Query: move correlations before update time
* Fix import in test
* Update comment
* Remove comment
* Remove comment
* Infinite scroll: report interactions from component
* Fix import order
* Rename action
* Infinite scroll: update limit reached message
* Explore logs: remove type assertion
* Update betterer
* Lezer: upgrade to 0.2.2
* Operations: update definitions
* Operations: update renderer
* Parsing: parse line filters with or operations
* Parsing: add unit test
* Formatting
* getHighlighterExpressionsFromQuery: add support for or statements
* Operation editor: trim button title if param name is empty
* getHighlighterExpressionsFromQuery: properly handle ip filters
* LogRow: detect text selection
* LogRow: refactor menu as component
* LogRow: add actions to menu
* LogRow: hack menu position
* Remove unsused imports
* LogRowMessage: remove popover code
* PopoverMenu: refactor
* LogRows: implement PopoverMenu at log rows level
* PopoverMenu: implement copy
* PopoverMenu: receive row model
* PopoverMenu: fix onClick capture issue
* Explore: add new filter methods and props for line filters
* PopoverMenu: use new filter props
* Explore: separate toggleable and non toggleable filters
* PopoverMenu: improve copy
* ModifyQuery: extend line filter with value argument
* PopoverMenu: close with escape
* Remove unused import
* Prettier
* PopoverMenu: remove label filter options
* LogRow: rename text selection handling prop
* Update test
* Remove unused import
* Popover menu: add unit test
* LogRows: update unit test
* Log row: hide the log row menu if the user is selecting text
* Log row: dont hide row menu if popover is not in scope
* Log rows: rename state variable
* Popover menu: allow menu to scroll
* Log rows: fix classname prop
* Log rows: close popover if mouse event comes from outside the log rows
* Declare new class using object style
* Fix style declaration
* Logs Popover Menu: add string filtering functions (#76757)
* Loki modifyQuery: add line does not contain query modification
* Elastic modifyQuery: implement line filters
* Modify query: change action name to not be loki specific
* Prettier
* Prettier
* Elastic: escape filter values
* Popover menu: create feature flag
* Log Rows: integrate logsRowsPopoverMenu flag
* Rename feature flag
* Popover menu: track interactions
* Prettier
* logRowsPopoverMenu: update stage
* Popover menu: add ds type to tracking data
* Log rows: move feature flag check
* Improve handle deselection
* LogsContainer: implement data source feature check
* LogsContainer: improve check for normal data source mode
* LogsContainer: use updated reference to data source instance
* Formatting
* LogsContainer: compare uid to constant
* LogsContainer: rename variable
* Loki completion: add more context to comments
* Improve grammar of comment
* Completions: expand on parser-offering part
* Update public/app/plugins/datasource/loki/components/monaco-query-field/monaco-completion-provider/completions.ts
* Formatting
* Logfmt autocompletion: better handling of trailing commas
* Situation: refactor getSituation and getErrorNode
Looking for simplicity, removing redundancy, and looking for a more accurate node resolution
* Autocompletion: refactor logfmt and top level
* Update tests
* Autocompletion: better handling of trailing characters
* Completions: Update data to type changes
* Update log query in test situation
* Format code
* Autocomplete: support offering partial labels
* Completion: expand test cases
* GA toggleable labels
* Logs integration: update readme with new features
* Build a logs data source: update docs with the new interface
* Plugin docs: update example function signatures and arguments
* Plugin docs: update modifyQuery function names
* Formatting
* Remove character
* Remove `expr` from docs
* Plugin docs: improve code
* Plugin docs: further code improvements
* Logs: Hide filters in log details if the data source doesn't support them
* Logs Container: use logsQueries prop
* Log details: add filters visibility test
* Lucene: add dependency
* ModifyQuery: use Lucene parser to detect key:values in queries
* ModifyQuery: use Lucene parser to remove filters
* Remove test code
* Modify query: switch to recursive implementation
* Modify query: implement remove filter
* Update query normalizing function
* FlagElasticToggleableFilters: remove feature flag
* Remove unused feature flag from test
* Elasticsearch: escape quotes in filter values
* 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