Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some inital ideas for tag category filtering #4037

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
73 changes: 38 additions & 35 deletions koku/api/tags/all/openshift/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

from api.models import Provider
from api.report.all.openshift.provider_map import OCPAllProviderMap
from api.tags.ocp.queries import OCPTagQueryHandler
from api.tags.queries import TagQueryHandler
from reporting.models import OCPAWSTagsSummary
from reporting.models import OCPAzureTagsSummary
Expand All @@ -22,6 +23,8 @@
class OCPAllTagQueryHandler(TagQueryHandler):
"""Handles tag queries and responses for OCP-on-All."""

# TODO SHOULDNT THIS INCLUDE GCP?

provider = Provider.OCP_ALL
data_sources = [
{"db_table": OCPAWSTagsSummary, "db_column_period": "cost_entry_bill__billing_period"},
Expand All @@ -45,7 +48,7 @@ class OCPAllTagQueryHandler(TagQueryHandler):
},
},
]
SUPPORTED_FILTERS = TagQueryHandler.SUPPORTED_FILTERS + ["account", "cluster"]
SUPPORTED_FILTERS = TagQueryHandler.SUPPORTED_FILTERS + OCPTagQueryHandler.SUPPORTED_FILTERS

def __init__(self, parameters):
"""Establish OCP on All infrastructure tag query handler.
Expand All @@ -65,42 +68,42 @@ def filter_map(self):
filter_map = deepcopy(TagQueryHandler.FILTER_MAP)
if self._parameters.get_filter("value"):
filter_map.update(
{
"account": [
{"field": "account_aliases", "operation": "icontains", "composition_key": "account_filter"},
{"field": "usage_account_ids", "operation": "icontains", "composition_key": "account_filter"},
],
"project": {"field": "namespaces", "operation": "icontains"},
"cluster": [
{"field": "cluster_ids", "operation": "icontains", "composition_key": "cluster_filter"},
{"field": "cluster_aliases", "operation": "icontains", "composition_key": "cluster_filter"},
],
}
dict(
{
"account": [
{
"field": "account_aliases",
"operation": "icontains",
"composition_key": "account_filter",
},
{
"field": "usage_account_ids",
"operation": "icontains",
"composition_key": "account_filter",
},
],
},
**OCPTagQueryHandler.FILTER_MAP_OCP_MULTI
)
)
else:
filter_map.update(
{
"account": [
{
"field": "account_alias__account_alias",
"operation": "icontains",
"composition_key": "account_filter",
},
{"field": "usage_account_id", "operation": "icontains", "composition_key": "account_filter"},
],
"project": {"field": "namespace", "operation": "icontains"},
"cluster": [
{
"field": "report_period__cluster_id",
"operation": "icontains",
"composition_key": "cluster_filter",
},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
}
dict(
{
"account": [
{
"field": "account_alias__account_alias",
"operation": "icontains",
"composition_key": "account_filter",
},
{
"field": "usage_account_id",
"operation": "icontains",
"composition_key": "account_filter",
},
],
},
**OCPTagQueryHandler.FILTER_MAP_OCP_SINGLE
)
)
return filter_map
72 changes: 36 additions & 36 deletions koku/api/tags/aws/openshift/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,44 +65,44 @@ def filter_map(self):
filter_map = deepcopy(TagQueryHandler.FILTER_MAP)
if self._parameters.get_filter("value"):
filter_map.update(
{
"account": [
{"field": "account_aliases", "operation": "icontains", "composition_key": "account_filter"},
{"field": "usage_account_ids", "operation": "icontains", "composition_key": "account_filter"},
],
"project": {"field": "namespaces", "operation": "icontains"},
"cluster": [
{"field": "cluster_ids", "operation": "icontains", "composition_key": "cluster_filter"},
{"field": "cluster_aliases", "operation": "icontains", "composition_key": "cluster_filter"},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
}
dict(
{
"account": [
{
"field": "account_aliases",
"operation": "icontains",
"composition_key": "account_filter",
},
{
"field": "usage_account_ids",
"operation": "icontains",
"composition_key": "account_filter",
},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**OCPTagQueryHandler.FILTER_MAP_OCP_MULTI
)
)
else:
filter_map.update(
{
"account": [
{
"field": "account_alias__account_alias",
"operation": "icontains",
"composition_key": "account_filter",
},
{"field": "usage_account_id", "operation": "icontains", "composition_key": "account_filter"},
],
"project": {"field": "namespace", "operation": "icontains"},
"cluster": [
{
"field": "report_period__cluster_id",
"operation": "icontains",
"composition_key": "cluster_filter",
},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
}
dict(
{
"account": [
{
"field": "account_alias__account_alias",
"operation": "icontains",
"composition_key": "account_filter",
},
{
"field": "usage_account_id",
"operation": "icontains",
"composition_key": "account_filter",
},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**OCPTagQueryHandler.FILTER_MAP_OCP_SINGLE
)
)
return filter_map
40 changes: 14 additions & 26 deletions koku/api/tags/azure/openshift/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,34 +60,22 @@ def filter_map(self):
filter_map = deepcopy(TagQueryHandler.FILTER_MAP)
if self._parameters.get_filter("value"):
filter_map.update(
{
"subscription_guid": {"field": "subscription_guids", "operation": "icontains"},
"project": {"field": "namespaces", "operation": "icontains"},
"cluster": [
{"field": "cluster_ids", "operation": "icontains", "composition_key": "cluster_filter"},
{"field": "cluster_aliases", "operation": "icontains", "composition_key": "cluster_filter"},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
}
dict(
{
"subscription_guid": {"field": "subscription_guids", "operation": "icontains"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**OCPTagQueryHandler.FILTER_MAP_OCP_MULTI
)
)
else:
filter_map.update(
{
"subscription_guid": {"field": "subscription_guid", "operation": "icontains"},
"project": {"field": "namespace", "operation": "icontains"},
"cluster": [
{
"field": "report_period__cluster_id",
"operation": "icontains",
"composition_key": "cluster_filter",
},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
}
dict(
{
"subscription_guid": {"field": "subscription_guid", "operation": "icontains"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**OCPTagQueryHandler.FILTER_MAP_OCP_SINGLE
)
)
return filter_map
40 changes: 14 additions & 26 deletions koku/api/tags/gcp/openshift/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,34 +58,22 @@ def filter_map(self):
filter_map = deepcopy(TagQueryHandler.FILTER_MAP)
if self._parameters.get_filter("value"):
filter_map.update(
{
"account": {"field": "account_ids", "operation": "icontains"},
"project": {"field": "namespaces", "operation": "icontains"},
"cluster": [
{"field": "cluster_ids", "operation": "icontains", "composition_key": "cluster_filter"},
{"field": "cluster_aliases", "operation": "icontains", "composition_key": "cluster_filter"},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
}
dict(
{
"account": {"field": "account_ids", "operation": "icontains"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**OCPTagQueryHandler.FILTER_MAP_OCP_MULTI
)
)
else:
filter_map.update(
{
"account": {"field": "account_id", "operation": "icontains"},
"project": {"field": "namespace", "operation": "icontains"},
"cluster": [
{
"field": "report_period__cluster_id",
"operation": "icontains",
"composition_key": "cluster_filter",
},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
}
dict(
{
"account": {"field": "account_id", "operation": "icontains"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**OCPTagQueryHandler.FILTER_MAP_OCP_SINGLE
)
)
return filter_map
85 changes: 41 additions & 44 deletions koku/api/tags/ocp/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,33 @@
from reporting.provider.ocp.models import OCPTagsValues


filter_map_single = {
"project": {"field": "namespace", "operation": "icontains"},
"cluster": [
{
"field": "report_period__cluster_id",
"operation": "icontains",
"composition_key": "cluster_filter",
},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
"node": {"field": "node", "operation": "icontains"},
}

filter_map_multi = {
"project": {"field": "namespaces", "operation": "contained_by"},
"cluster": [
{"field": "cluster_ids", "operation": "contained_by", "composition_key": "cluster_filter"},
{"field": "cluster_aliases", "operation": "contained_by", "composition_key": "cluster_filter"},
],
"node": {"field": "nodes", "operation": "contained_by"},
}


class OCPTagQueryHandler(TagQueryHandler):
"""Handles tag queries and responses for OCP."""

Expand All @@ -38,25 +65,20 @@ class OCPTagQueryHandler(TagQueryHandler):
]
TAGS_VALUES_SOURCE = [{"db_table": OCPTagsValues, "fields": ["key"]}]
SUPPORTED_FILTERS = TagQueryHandler.SUPPORTED_FILTERS + ["project", "enabled", "cluster", "node"]
FILTER_MAP_OCP_SINGLE = filter_map_single
FILTER_MAP_OCP_MULTI = filter_map_multi
FILTER_MAP = deepcopy(TagQueryHandler.FILTER_MAP)
FILTER_MAP.update(
{
"project": {"field": "namespace", "operation": "icontains"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
"cluster": [
{"field": "report_period__cluster_id", "operation": "icontains", "composition_key": "cluster_filter"},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
"node": {"field": "node", "operation": "icontains"},
}
dict(
{
"enabled": {"field": "enabled", "operation": "exact", "parameter": True},
},
**filter_map_single
)
)

def __init__(self, parameters):
"""Establish AWS report query handler.
"""Establish OCP report query handler.

Args:
parameters (QueryParameters): parameter object for query
Expand All @@ -76,36 +98,11 @@ def filter_map(self):
"""Establish which filter map to use based on tag API."""
filter_map = deepcopy(TagQueryHandler.FILTER_MAP)
enabled_parameter = self._parameters.get_filter("enabled") in (None, True)
enabled_filter = {
"enabled": {"field": "enabled", "operation": "exact", "parameter": enabled_parameter},
}
if self._parameters.get_filter("value"):
filter_map.update(
{
"project": {"field": "namespaces", "operation": "contained_by"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": enabled_parameter},
"cluster": [
{"field": "cluster_ids", "operation": "contained_by", "composition_key": "cluster_filter"},
{"field": "cluster_aliases", "operation": "contained_by", "composition_key": "cluster_filter"},
],
"node": {"field": "nodes", "operation": "contained_by"},
}
)
filter_map.update(dict(enabled_filter, **filter_map_multi))
else:
filter_map.update(
{
"project": {"field": "namespace", "operation": "icontains"},
"enabled": {"field": "enabled", "operation": "exact", "parameter": enabled_parameter},
"cluster": [
{
"field": "report_period__cluster_id",
"operation": "icontains",
"composition_key": "cluster_filter",
},
{
"field": "report_period__cluster_alias",
"operation": "icontains",
"composition_key": "cluster_filter",
},
],
"node": {"field": "node", "operation": "icontains"},
}
)
filter_map.update(dict(enabled_filter, **filter_map_single))
return filter_map