Rename activity filter configuration to ticket filters
This commit is contained in:
@@ -413,8 +413,8 @@ namespace C4IT.DataHistoryProvider
|
||||
GlobalConfig = new cF4sdGlobalConfig(regPath: null);
|
||||
if (GlobalParametersConfigFile.Parameters != null)
|
||||
GlobalConfig.Load(CentralParameters: GlobalParametersConfigFile.Parameters);
|
||||
GlobalConfig.TicketConfiguration.ActivityFilters =
|
||||
GlobalParametersConfigFile.ActivityFilters ?? new cActivityFilterPolicy();
|
||||
GlobalConfig.TicketConfiguration.TicketFilters =
|
||||
GlobalParametersConfigFile.TicketFilters ?? new cTicketFilterPolicy();
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -508,7 +508,7 @@ namespace C4IT.DataHistoryProvider
|
||||
// load the global parameters
|
||||
if (!RefreshGlobalConfigurationParameters())
|
||||
return false;
|
||||
InfrastructureConfig.RemoveLegacyActivityFilterConfiguration();
|
||||
InfrastructureConfig.RemoveLegacyTicketFilterConfiguration();
|
||||
|
||||
mainDbConnection = InfrastructureConfig.HistoryDB.Connection;
|
||||
|
||||
|
||||
@@ -694,18 +694,18 @@ namespace C4IT.DataHistoryProvider
|
||||
var objSid = new SecurityIdentifier(UserId.sid, 0);
|
||||
var strSid = objSid.ToString();
|
||||
var _wc = await GetWebClient(requestInfo, Token);
|
||||
var request = new cTicketActivityListRequest
|
||||
var request = new cTicketListFilterRequest
|
||||
{
|
||||
Sid = strSid,
|
||||
Hours = Collector.InfrastructureConfig.M42Wpm.ClosedTicketHistory,
|
||||
Filters = GetActivityFilters()
|
||||
Filters = GetTicketFilters()
|
||||
};
|
||||
var res = await PostJsonAsync(_wc, constUrlGetTicketsV2, request, Token);
|
||||
if (res?.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
if (!TryGetLegacyQueueFilter(out var queueOption, out var encodedQueues))
|
||||
{
|
||||
LogEntry("The activity filter policy requires the v2 ticket API; legacy fallback was rejected (fail closed).", LogLevels.Warning);
|
||||
LogEntry("The ticket filter policy requires the v2 ticket API; legacy fallback was rejected (fail closed).", LogLevels.Warning);
|
||||
return null;
|
||||
}
|
||||
var strUrl = string.Format(
|
||||
@@ -1111,17 +1111,17 @@ namespace C4IT.DataHistoryProvider
|
||||
return (int)Collector.InfrastructureConfig.M42Wpm.ActivityQueueFilterOption;
|
||||
}
|
||||
|
||||
private cActivityFilterPolicy GetActivityFilters()
|
||||
private cTicketFilterPolicy GetTicketFilters()
|
||||
{
|
||||
return Collector?.GetGlobalConfig()?.TicketConfiguration?.ActivityFilters
|
||||
?? new cActivityFilterPolicy();
|
||||
return Collector?.GetGlobalConfig()?.TicketConfiguration?.TicketFilters
|
||||
?? new cTicketFilterPolicy();
|
||||
}
|
||||
|
||||
private bool TryGetLegacyQueueFilter(out int queueOption, out string encodedQueues)
|
||||
{
|
||||
queueOption = 0;
|
||||
encodedQueues = null;
|
||||
var activeFilters = (GetActivityFilters()?.Filters ?? new List<cActivityFilter>())
|
||||
var activeFilters = (GetTicketFilters()?.Filters ?? new List<cTicketFilter>())
|
||||
.Where(entry => entry?.Enabled == true)
|
||||
.ToList();
|
||||
if (activeFilters.Count == 0)
|
||||
@@ -1129,17 +1129,17 @@ namespace C4IT.DataHistoryProvider
|
||||
if (activeFilters.Count != 1)
|
||||
return false;
|
||||
|
||||
var activityFilter = activeFilters[0];
|
||||
if (!string.Equals(activityFilter.Provider, "Matrix42", StringComparison.OrdinalIgnoreCase)
|
||||
|| !string.Equals(activityFilter.Field, "Queue", StringComparison.OrdinalIgnoreCase)
|
||||
|| activityFilter.Match != enumActivityFilterMatch.include
|
||||
|| activityFilter.EmptyHandling == enumActivityFilterEmptyHandling.only)
|
||||
var ticketFilter = activeFilters[0];
|
||||
if (!string.Equals(ticketFilter.Provider, "Matrix42", StringComparison.OrdinalIgnoreCase)
|
||||
|| !string.Equals(ticketFilter.Field, "Queue", StringComparison.OrdinalIgnoreCase)
|
||||
|| ticketFilter.Match != enumTicketFilterMatch.include
|
||||
|| ticketFilter.EmptyHandling == enumTicketFilterEmptyHandling.only)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
queueOption = activityFilter.EmptyHandling == enumActivityFilterEmptyHandling.include ? 1 : 2;
|
||||
var values = (activityFilter.Values ?? new List<cActivityFilterValue>())
|
||||
queueOption = ticketFilter.EmptyHandling == enumTicketFilterEmptyHandling.include ? 1 : 2;
|
||||
var values = (ticketFilter.Values ?? new List<cTicketFilterValue>())
|
||||
.Where(value => value != null)
|
||||
.Select(value =>
|
||||
{
|
||||
@@ -1227,14 +1227,14 @@ namespace C4IT.DataHistoryProvider
|
||||
Sid = sid,
|
||||
Scope = scope,
|
||||
Keys = requestedKeys?.ToList() ?? new List<string>(),
|
||||
Filters = GetActivityFilters()
|
||||
Filters = GetTicketFilters()
|
||||
};
|
||||
var res = await PostJsonAsync(wc, constUrlGetTicketOverviewCountsV2, request, token);
|
||||
if (res?.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
if (!TryGetLegacyQueueFilter(out var queueOption, out var encodedQueues))
|
||||
{
|
||||
LogEntry("The activity filter policy requires the v2 overview API; legacy fallback was rejected (fail closed).", LogLevels.Warning);
|
||||
LogEntry("The ticket filter policy requires the v2 overview API; legacy fallback was rejected (fail closed).", LogLevels.Warning);
|
||||
return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
var urlBuilder = new StringBuilder(constUrlGetTicketOverviewCounts);
|
||||
@@ -1358,14 +1358,14 @@ namespace C4IT.DataHistoryProvider
|
||||
Scope = scope,
|
||||
Key = key,
|
||||
Count = Math.Max(0, count),
|
||||
Filters = GetActivityFilters()
|
||||
Filters = GetTicketFilters()
|
||||
};
|
||||
var res = await PostJsonAsync(wc, constUrlGetTicketOverviewRelationsV2, request, Token);
|
||||
if (res?.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
if (!TryGetLegacyQueueFilter(out var queueOption, out var encodedQueues))
|
||||
{
|
||||
LogEntry("The activity filter policy requires the v2 relation API; legacy fallback was rejected (fail closed).", LogLevels.Warning);
|
||||
LogEntry("The ticket filter policy requires the v2 relation API; legacy fallback was rejected (fail closed).", LogLevels.Warning);
|
||||
return new List<cF4sdApiSearchResultRelation>();
|
||||
}
|
||||
var urlBuilder = new StringBuilder(constUrlGetTicketOverviewRelations);
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace C4IT.DataHistoryProvider
|
||||
private const string constConfigRootElement = "F4SD-Global-Configuration";
|
||||
|
||||
public cConfigHelperParameterList Parameters { get; private set; } = null;
|
||||
public cActivityFilterPolicy ActivityFilters { get; private set; } = new cActivityFilterPolicy();
|
||||
public cTicketFilterPolicy TicketFilters { get; private set; } = new cTicketFilterPolicy();
|
||||
|
||||
private cDataHistoryConfigInfrastructure InfrastructureConfig = null;
|
||||
|
||||
@@ -111,8 +111,8 @@ namespace C4IT.DataHistoryProvider
|
||||
if (_ticketProcessingEntry != null)
|
||||
_result.Items[_ticketProcessingEntry.Name] = _ticketProcessingEntry;
|
||||
continue;
|
||||
case "ActivityFilters":
|
||||
ActivityFilters = getActivityFilters(_item, Parser);
|
||||
case "TicketFilters":
|
||||
TicketFilters = getTicketFilters(_item, Parser);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -166,20 +166,20 @@ namespace C4IT.DataHistoryProvider
|
||||
return _result;
|
||||
}
|
||||
|
||||
private static cActivityFilterPolicy getActivityFilters(XmlElement node, cXmlParser parser)
|
||||
private static cTicketFilterPolicy getTicketFilters(XmlElement node, cXmlParser parser)
|
||||
{
|
||||
var result = new cActivityFilterPolicy();
|
||||
var result = new cTicketFilterPolicy();
|
||||
foreach (XmlElement filterNode in node.SelectNodes("Filter").OfType<XmlElement>())
|
||||
{
|
||||
parser.EnterElement(filterNode.Name);
|
||||
try
|
||||
{
|
||||
if (!Enum.TryParse(filterNode.GetAttribute("Match"), true, out enumActivityFilterMatch match))
|
||||
match = enumActivityFilterMatch.exclude;
|
||||
if (!Enum.TryParse(filterNode.GetAttribute("EmptyHandling"), true, out enumActivityFilterEmptyHandling emptyHandling))
|
||||
emptyHandling = enumActivityFilterEmptyHandling.include;
|
||||
if (!Enum.TryParse(filterNode.GetAttribute("Match"), true, out enumTicketFilterMatch match))
|
||||
match = enumTicketFilterMatch.exclude;
|
||||
if (!Enum.TryParse(filterNode.GetAttribute("EmptyHandling"), true, out enumTicketFilterEmptyHandling emptyHandling))
|
||||
emptyHandling = enumTicketFilterEmptyHandling.include;
|
||||
|
||||
var filter = new cActivityFilter
|
||||
var filter = new cTicketFilter
|
||||
{
|
||||
Provider = filterNode.GetAttribute("Provider"),
|
||||
Field = filterNode.GetAttribute("Field"),
|
||||
@@ -190,7 +190,7 @@ namespace C4IT.DataHistoryProvider
|
||||
|
||||
foreach (XmlElement valueNode in filterNode.SelectNodes("Value").OfType<XmlElement>())
|
||||
{
|
||||
filter.Values.Add(new cActivityFilterValue
|
||||
filter.Values.Add(new cTicketFilterValue
|
||||
{
|
||||
ID = valueNode.GetAttribute("ID"),
|
||||
Name = valueNode.GetAttribute("Name")
|
||||
@@ -208,7 +208,7 @@ namespace C4IT.DataHistoryProvider
|
||||
return result;
|
||||
}
|
||||
|
||||
private string getDefaultActivityFiltersXml()
|
||||
private string getDefaultTicketFiltersXml()
|
||||
{
|
||||
var queueOption = InfrastructureConfig?.M42Wpm?.ActivityQueueFilterOption
|
||||
?? enumActivityQueueFilterOptions.showAll;
|
||||
@@ -216,11 +216,11 @@ namespace C4IT.DataHistoryProvider
|
||||
?? new List<cApiM42TicketQueueInfo>();
|
||||
var enableQueueFilter = queueOption != enumActivityQueueFilterOptions.showAll && queues.Count > 0;
|
||||
var emptyHandling = queueOption == enumActivityQueueFilterOptions.onlyListedQueues
|
||||
? enumActivityFilterEmptyHandling.exclude
|
||||
: enumActivityFilterEmptyHandling.include;
|
||||
? enumTicketFilterEmptyHandling.exclude
|
||||
: enumTicketFilterEmptyHandling.include;
|
||||
|
||||
var xml = new StringBuilder();
|
||||
xml.Append("<ActivityFilters>");
|
||||
xml.Append("<TicketFilters>");
|
||||
xml.AppendFormat(
|
||||
"<Filter Provider=\"Matrix42\" Field=\"Queue\" Enabled=\"{0}\" Match=\"include\" EmptyHandling=\"{1}\">",
|
||||
enableQueueFilter.ToString().ToLowerInvariant(),
|
||||
@@ -243,7 +243,7 @@ namespace C4IT.DataHistoryProvider
|
||||
xml.Append("<Value ID=\"1676de08-27f3-550c-b410-5610e807aa02\" Name=\"HR Service Management\" />");
|
||||
xml.Append("<Value ID=\"ed7dde08-199e-c27b-b410-562b64037aa1\" Name=\"Gebäudemanagement\" />");
|
||||
xml.Append("</Filter>");
|
||||
xml.Append("</ActivityFilters>");
|
||||
xml.Append("</TicketFilters>");
|
||||
return xml.ToString();
|
||||
}
|
||||
|
||||
@@ -582,12 +582,16 @@ namespace C4IT.DataHistoryProvider
|
||||
);
|
||||
RetVal |= DoXmlInsertElement(XmlRoot
|
||||
, "TicketConfiguration"
|
||||
, "ActivityFilters"
|
||||
, getDefaultActivityFiltersXml()
|
||||
, "TicketFilters"
|
||||
, getDefaultTicketFiltersXml()
|
||||
);
|
||||
RetVal |= DoXmlRemoveElement(XmlRoot
|
||||
, "TicketConfiguration"
|
||||
, "OpenActivitiesExternally"
|
||||
RetVal |= DoXmlRemoveElement(XmlRoot
|
||||
, "TicketConfiguration"
|
||||
, "ActivityFilters"
|
||||
);
|
||||
RetVal |= DoXmlRemoveElement(XmlRoot
|
||||
, "TicketConfiguration"
|
||||
, "OpenActivitiesExternally"
|
||||
);
|
||||
RetVal |= DoXmlInsertElement(XmlRoot
|
||||
, "TicketConfiguration"
|
||||
|
||||
@@ -121,9 +121,9 @@ namespace C4IT.DataHistoryProvider
|
||||
return false;
|
||||
}
|
||||
|
||||
internal bool RemoveLegacyActivityFilterConfiguration()
|
||||
internal bool RemoveLegacyTicketFilterConfiguration()
|
||||
{
|
||||
// Queue filtering moved to the provider-neutral global ActivityFilters policy.
|
||||
// Queue filtering moved to the provider-neutral global TicketFilters policy.
|
||||
// This intentionally runs only after the global configuration was loaded:
|
||||
// DoXmlUpdates runs before InstantiateProperties and would otherwise erase
|
||||
// the values before the one-time migration can read them.
|
||||
|
||||
Reference in New Issue
Block a user