示例#1
0
 /// <summary>
 /// Converts the input <see cref="SarUsageEvent"/> instance to a <see cref="SarEvaluationUsageEvent"/>
 /// </summary>
 private static SarEvaluationUsageEvent ToEvaluationUsageEvent(SarUsageEvent usageEvent)
 {
     return(new SarEvaluationUsageEvent
     {
         UserId = usageEvent.UserId.ToString(),
         ItemId = usageEvent.ItemId.ToString()
     });
 }
示例#2
0
        /// <summary>
        /// Parse a usage events file into usage events items.
        /// Expected format is userId,itemId,timestamp[,event-type[,event-weight]
        /// </summary>
        private IEnumerable <SarUsageEvent> ParseUsageEventsFile(string usageFile, FileParsingReport parsingReport, DateTime defaultEventTimestamp)
        {
            using (var reader = new TextFieldParser(usageFile)
            {
                Delimiters = new[] { "," }
            })
            {
                while (!reader.EndOfData)
                {
                    string[] fields;
                    parsingReport.TotalLinesCount++;

                    try
                    {
                        fields = reader.ReadFields();
                    }
                    catch (MalformedLineException ex)
                    {
                        if (ShouldContinueAfterError(ParsingErrorReason.MalformedLine,
                                                     parsingReport, usageFile, ex.LineNumber))
                        {
                            continue;
                        }

                        yield break;
                    }

                    ParsingErrorReason?parsingError;
                    ParsingErrorReason?parsingWarning;
                    SarUsageEvent      usageEvent = ParseUsageEvent(fields, defaultEventTimestamp, out parsingError, out parsingWarning);
                    if (parsingError.HasValue)
                    {
                        if (ShouldContinueAfterError(parsingError.Value,
                                                     parsingReport, usageFile, reader.LineNumber - 1))
                        {
                            continue;
                        }

                        yield break;
                    }

                    if (parsingWarning.HasValue)
                    {
                        parsingReport.Warnings.Add(new ParsingError(Path.GetFileName(usageFile), reader.LineNumber - 1,
                                                                    parsingWarning.Value));

                        continue;
                    }

                    parsingReport.SuccessfulLinesCount++;
                    yield return(usageEvent);
                }
            }
        }
        private SarUsageEvent ConvertToSarUsageEvent(IUsageEvent usageEvent)
        {
            var sarUsageEvent = new SarUsageEvent();

            uint itemId;

            if (_itemIdReverseLookup.TryGetValue(usageEvent.ItemId.ToLowerInvariant(), out itemId))
            {
                sarUsageEvent.ItemId = itemId;
            }

            if (_properties.EnableUserAffinity)
            {
                sarUsageEvent.Timestamp = usageEvent.Timestamp ?? DateTime.UtcNow;
                sarUsageEvent.Weight    = usageEvent.EventType?.GetEventWeight() ?? 1;

                // If weight is provided overwrite the value.
                sarUsageEvent.Weight = usageEvent.Weight ?? sarUsageEvent.Weight;
            }

            return(sarUsageEvent);
        }