Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
Annoraaq committed Dec 20, 2024
2 parents 8b92525 + 8dd8b53 commit ce39996
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 90 deletions.
5 changes: 4 additions & 1 deletion api_client/python/timesketch_api_client/aggregation.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import getpass
import json
import logging
from typing import Any

import altair
import pandas
Expand All @@ -41,6 +42,8 @@ class Aggregation(resource.SketchResource):
saved search.
"""

resource_data: dict[str, Any]

def __init__(self, sketch):
self._created_at = ""
self._name = ""
Expand Down Expand Up @@ -307,7 +310,7 @@ def description(self, description):
"""Set the description of an aggregation."""
if "meta" not in self.resource_data:
return
meta = self.resource_data.get("meta")
meta = self.resource_data.get("meta", {})
meta["description"] = description

@property
Expand Down
13 changes: 10 additions & 3 deletions api_client/python/timesketch_api_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ def __init__(
self._flow = None

if not create_session:
self.session = None
self._session = None
return

try:
self.session = self._create_session(
self._session = self._create_session(
username,
password,
verify=verify,
Expand Down Expand Up @@ -145,13 +145,20 @@ def version(self):

return "API Client: {0:s}".format(version.get_version())

@property
def session(self):
"""Property that returns the session object."""
if self._session is None:
raise ValueError("Session is not set.")
return self._session

def set_credentials(self, credential_object):
"""Sets the credential object."""
self.credentials = credential_object

def set_session(self, session_object):
"""Sets the session object."""
self.session = session_object
self._session = session_object

def _authenticate_session(self, session, username, password):
"""Post username/password to authenticate the HTTP session.
Expand Down
6 changes: 4 additions & 2 deletions api_client/python/timesketch_api_client/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,12 +231,14 @@ def from_graph(self, graph_obj):
self._created_at = time
self._updated_at = time

def from_manual(self, data, **kwargs): # pylint: disable=arguments-differ
def from_manual(
self, data, **kwargs
): # pylint: disable=arguments-differ; pytype: disable=signature-mismatch
"""Generate a new graph using a dictionary.
Args:
data (dict): A dictionary of dictionaries adjacency representation.
kwargs (dict[str, object]): Depending on the resource they may
**kwargs (dict[str, object]): Depending on the resource they may
require different sets of arguments to be able to run a raw
API request.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ limitations under the License.
<TsEventFieldSelect
:field="selectedField"
@selectedField="selectedField = $event"
:timelineFields="timelineFields"
:loadingFields="loadingFields"
:rules="[rules.required]"
>
</TsEventFieldSelect>
Expand Down Expand Up @@ -116,14 +114,6 @@ export default {
splitByTimeline: {
type: Boolean,
},
timelineFields: {
type: Array,
default: () => [],
},
loadingFields: {
type: Boolean,
default: false
},
},
data() {
return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@ limitations under the License.
<v-autocomplete
outlined
v-model="selectedField"
:items="mappedTimelineFields"
:items="allNonTimestampFields"
label="Field name to aggregate"
:loading="loadingFields"
@input="$emit('selectedField', $event)"
>
<template
Expand Down Expand Up @@ -57,40 +56,33 @@ export default {
field: {
type: Object,
},
timelineFields: {
type: Array,
default: () => [],
},
loadingFields: {
type: Boolean,
default: false
},
},
data() {
return {
selectedField: this.field,
}
},
computed: {
mappedTimelineFields() {
const mappings = this.$store.state.meta.mappings;

return this.timelineFields.map(field => {
const mapping = mappings.find(m => m.field === field);
const type = mapping ? mapping.type : 'unknown';
return { text: field, value: { field, type } };
});
allNonTimestampFields() {
let mappings = this.$store.state.meta.mappings
.filter(
(mapping) => {
return (
mapping['field'] !== 'datetime'
&& mapping['field'] !== 'timestamp'
)
})
.map(
(mapping) => {
return {text: mapping['field'], value: mapping}}
)
return mappings
},
},
watch: {
field() {
this.selectedField = this.field
},
timelineFields(newFields) {
if (!newFields || newFields.length === 0) {
this.selectedField = null;
}
},
}
}
}
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ limitations under the License.
<v-row class="mt-3">
<v-col>
<TsAggregationEventSelect
@updateTimelineIDs="getTimelineFields"
@updateTimelineIDs="selectedTimelineIDs = $event"
:timelineIDs="selectedTimelineIDs"
@updateQueryString="selectedQueryString = $event"
:queryString="selectedQueryString"
Expand All @@ -48,8 +48,6 @@ limitations under the License.
>
</TsAggregationEventSelect>
<TsAggregationConfig
:timelineFields="availableTimelineFields"
:loadingFields="loadingFields"
:field="selectedField"
@updateField="selectedField = $event"
:aggregator="selectedAggregator"
Expand Down Expand Up @@ -292,8 +290,6 @@ export default {
selectedYTitle: this.yTitle,
renameVisualDialog: false,
selectedChartTitleDraft: this.selectedChartTitleDraft,
availableTimelineFields: [],
loadingFields: false,
}
},
computed: {
Expand All @@ -320,51 +316,6 @@ export default {
},
},
methods: {
getTimelineFields(timelineIDs) {
this.selectedTimelineIDs = timelineIDs
if (!timelineIDs || timelineIDs.length === 0 ) {
this.availableTimelineFields = []
return;
}

this.loadingFields = true;

if (timelineIDs.length === 1) {
ApiClient.getTimelineFields(this.sketch.id, timelineIDs[0])
.then(response => {
this.availableTimelineFields = response.data.objects
this.loadingFields = false
})
.catch(error => {
console.error("Error fetching fields:", error);
this.availableTimelineFields = [];
this.loadingFields = false
});
}
else {
const promises = timelineIDs.map(timelineID => {
return ApiClient.getTimelineFields(this.sketch.id, timelineID)
.then(response => response.data.objects)
.catch(error => {
console.error("Error fetching timeline fields:", error);
return []
})
})

Promise.all(promises)
.then(results => {
// Flatten the arrays and create a set to guarantee uniqueness
const union = [...new Set(results.flat())];
this.availableTimelineFields = union
this.loadingFields = false;
})
.catch(error => {
console.error("Error in Promise.all", error)
this.availableTimelineFields = []
this.loadingFields = false;
})
}
},
rename() {
this.renameVisualDialog = false
this.selectedChartTitle = this.selectedChartTitleDraft
Expand Down

0 comments on commit ce39996

Please sign in to comment.