public void Run() { using (var db = new DevelopmentHistoryDatabase("G:\\DATEV-269-histories.sqlite")) { var feedbackDatabase = OpenDatabase("_import"); var developerCollection = feedbackDatabase.GetDeveloperCollection(); var eventsCollection = feedbackDatabase.GetEventsCollection(); foreach (var developer in developerCollection.FindAll()) { var workPeriod = developer.Id.ToString(); _numberOfSSTs = 0; _numberOfOUs = 0; _errorMessages.Clear(); _logger.Info("Processing WorkPeriod {0}...", workPeriod); foreach ( var completionEvent in eventsCollection.GetEventStream(developer).OfType <CompletionEvent>()) { var timestamp = completionEvent.TriggeredAt.GetValueOrDefault(); var ctx = completionEvent.Context2; Insert(db, workPeriod, timestamp, ctx); } _logger.Info(" > Inserted {0} SSTs and {1} OUs.", _numberOfSSTs, _numberOfOUs); if (_errorMessages.Any()) { _logger.Info( " > {0} errors occured:\n - {1}", _errorMessages.Count, string.Join("\n - ", _errorMessages)); } } } }
private void Insert(DevelopmentHistoryDatabase db, string workPeriod, DateTimeOffset timestamp, Context ctx) { var query = GetQuery(ctx); var usages = GetObjectUsages(ctx); if (!usages.Any()) { // No need to blow up the dataset with SST that don't contain any code. Most likely our // analysis failed to extract the context in these cases. return; } db.Insert(workPeriod, timestamp, ctx, query); _numberOfSSTs++; foreach (var usage in usages) { var isQuery = usage.Equals(query); db.Insert(workPeriod, timestamp, usage, isQuery); _numberOfOUs++; } }