public string GetExecutedCommandsAsString()
{
if (allExecutedCommands.IsValueCreated == false)
return String.Empty;
try
{
var aggregatedCommandsExecuted = new Dictionary<string, int>();
var aggregatedCommandExecutionTime = new Dictionary<string, int>();
StringBuilder builder = new StringBuilder();
int estimatedLength = 0;
foreach (var command in allExecutedCommands.Value)
{
builder.Clear();
builder.Append(command.CommandName);
var events = command.ExecutionEvents.ToArray();
//if (events.Length > 0)
//{
// Array.Sort(events);
// //replicate functionality of Arrays.toString(events.toArray()) to append directly to existing StringBuilder
// builder.Append("[");
// foreach (var evt in events)
// {
// switch (evt) {
// case EMIT:
// int numEmissions = command.getNumberEmissions();
// if (numEmissions > 1)
// {
// builder.append(event).append("x").append(numEmissions).append(", ");
// }
// else
// {
// builder.append(event).append(", ");
// }
// break;
// case FALLBACK_EMIT:
// int numFallbackEmissions = command.getNumberFallbackEmissions();
// if (numFallbackEmissions > 1)
// {
// builder.append(event).append("x").append(numFallbackEmissions).append(", ");
// }
// else
// {
// builder.append(event).append(", ");
// }
// break;
// default:
// builder.append(event).append(", ");
// }
// }
// builder.setCharAt(builder.length() - 2, ']');
// builder.setLength(builder.length() - 1);
//} else {
builder.Append("[Executed]");
//}
var display = builder.ToString();
estimatedLength += display.Length + 12; //add 12 chars to display length for appending totalExecutionTime and count below
int counter;
if (aggregatedCommandsExecuted.TryGetValue(display, out counter))
{
aggregatedCommandsExecuted[display] = counter + 1;
}
else
{
// add it
aggregatedCommandsExecuted.Add(display, 1);
}
int executionTime = command.ExecutionTimeInMilliseconds;
if (executionTime < 0)
{
// do this so we don't create negative values or subtract values
executionTime = 0;
}
if (aggregatedCommandExecutionTime.TryGetValue(display, out counter) && executionTime > 0)
{
// add to the existing executionTime (sum of executionTimes for duplicate command displayNames)
aggregatedCommandExecutionTime[display] = counter + executionTime;
}
else
{
// add it
aggregatedCommandExecutionTime.Add(display, executionTime);
}
}
builder.Clear();
builder.EnsureCapacity(estimatedLength);
foreach (var kv in aggregatedCommandsExecuted)
{
if (builder.Length > 0)
{
builder.Append(", ");
}
builder.Append(kv.Key);
int totalExecutionTime;
aggregatedCommandExecutionTime.TryGetValue(kv.Key, out totalExecutionTime);
builder.Append("[").Append(totalExecutionTime).Append("ms]");
int count = kv.Value;
if (count > 1)
{
builder.Append("x").Append(count);
}
}
return builder.ToString();
}
catch (Exception )
{
//logger.error("Failed to create RequestLog response header string.", e);
// don't let this cause the entire app to fail so just return "Unknown"
return "Unknown";
}
}
}