Skip to content

Commit 83b708f

Browse files
committed
Optional redis fixes + import fixes for audit logs
1 parent db7f292 commit 83b708f

File tree

10 files changed

+25
-46
lines changed

10 files changed

+25
-46
lines changed

src/AnalyticsEngine/Common/DataUtils/ConsoleApp.cs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Microsoft.Extensions.Logging;
22
using System;
3-
using System.Configuration;
43

54
namespace DataUtils
65
{
@@ -35,34 +34,16 @@ public static void BombOut(bool error)
3534
}
3635
}
3736

38-
public static void PrintStartupAndLoggingConfig(ILogger logger)
37+
public static void PrintStartupAndLoggingConfig(string efConnectionString, string buildLabel, string userGroupsFilterString, ILogger logger)
3938
{
40-
if (logger is null)
41-
{
42-
throw new ArgumentNullException(nameof(logger));
43-
}
4439

45-
var buildLabel = ConfigurationManager.AppSettings["BuildLabel"];
4640
logger.LogInformation($"Office 365 Advanced Analytics engine START: '{buildLabel}'.");
47-
48-
string efConnectionString = ConfigurationManager.ConnectionStrings["SPOInsightsEntities"].ConnectionString;
4941
var sqlConnectionInfo = new System.Data.SqlClient.SqlConnectionStringBuilder(efConnectionString);
5042
logger.LogInformation($"Destination SQL Server='{sqlConnectionInfo.DataSource}', DB='{sqlConnectionInfo.InitialCatalog}'.");
51-
52-
bool loggingEnabled = ConfigurationManager.AppSettings["ImportLogging"] == "True";
53-
#if DEBUG
54-
loggingEnabled = true;
55-
#endif
56-
57-
if (loggingEnabled)
43+
if (!string.IsNullOrEmpty(userGroupsFilterString))
5844
{
59-
logger.LogInformation("Import logging is ENABLED.");
60-
}
61-
else
62-
{
63-
logger.LogInformation("Import logging is disabled. Add key 'ImportLogging' value 'True' to configuration to enable full logging.");
45+
logger.LogWarning($"WARNING: User groups import filter configured: '{userGroupsFilterString}'. Will not import data for users not in those groups");
6446
}
6547
}
66-
6748
}
6849
}

src/AnalyticsEngine/Common/Entities/Config/AppConfig.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public AppConfig()
2020
this.AppInsightsApiKey = ConfigurationManager.AppSettings["AppInsightsApiKey"];
2121
this.AppInsightsAppId = ConfigurationManager.AppSettings["AppInsightsAppId"];
2222

23+
this.BuildLabel = ConfigurationManager.AppSettings["BuildLabel"];
2324

2425
this.ClientID = ConfigurationManager.AppSettings.Get("ClientID");
2526
this.ClientSecret = ConfigurationManager.AppSettings.Get("ClientSecret");
@@ -76,7 +77,7 @@ public AppConfig()
7677
}
7778
}
7879

79-
80+
public string BuildLabel { get; set; }
8081
public string AppInsightsContainerName { get; set; }
8182
public string AppInsightsApiKey { get; set; }
8283
public string AppInsightsAppId { get; set; }

src/AnalyticsEngine/WebJob.AppInsightsImporter/Program.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -155,25 +155,15 @@ private static void BombOut()
155155
/// Output the config and check it's good.
156156
/// </summary>
157157
/// <returns>If the config is valid</returns>
158-
private static bool ValidateAndPrintConfig(AppConfig config, ILogger telemetry)
158+
private static bool ValidateAndPrintConfig(AppConfig settings, ILogger telemetry)
159159
{
160-
ConsoleApp.PrintStartupAndLoggingConfig(telemetry);
160+
ConsoleApp.PrintStartupAndLoggingConfig(settings.ConnectionStrings.DatabaseConnectionString, settings.BuildLabel, settings.UserGroupsFilter, telemetry);
161161

162162
// Have config object test
163163

164-
var accountName = StringUtils.FindValueForProp(config.ConnectionStrings.DatabaseConnectionString, "AccountName");
164+
settings.ConnectionStrings.TestSQLSettings(telemetry);
165165

166-
string efConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["SPOInsightsEntities"].ConnectionString;
167-
var sqlConnectionInfo = new System.Data.SqlClient.SqlConnectionStringBuilder(efConnectionString);
168-
169-
telemetry.LogInformation("Configured values:");
170-
//pIIConfig.PrintConfig(telemetry); // PII anonisation is broken for the time being in this project, but nobody uses it anyway...
171-
172-
telemetry.LogInformation($"Destination SQL Server configuration: \ndata source='{sqlConnectionInfo.DataSource}', initial catalog='{sqlConnectionInfo.InitialCatalog}'");
173-
174-
config.ConnectionStrings.TestSQLSettings(telemetry);
175-
176-
if (string.IsNullOrEmpty(config.AppInsightsApiKey))
166+
if (string.IsNullOrEmpty(settings.AppInsightsApiKey))
177167
{
178168
telemetry.LogInformation("Critical: no Application Insights API key found - can't continue. Run the latest installer again to reset configuration.");
179169
return false;

src/AnalyticsEngine/WebJob.Office365ActivityImporter.Engine/ActivityAPI/ActivityReportSqlPersistenceManager.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,15 @@ private async Task<ImportStat> SaveToSqlAllTheThings(ActivityReportSet activitie
128128
}
129129
else
130130
{
131+
result = SaveResultEnum.UserOutOfScope;
131132
_telemetry.LogInformation($"Skipping activity report for user '{abtractLog.UserId}' - not in user groups filter");
132133
}
133134
}
134135
else
135136
{
136137
// No URL
137138
cache.RememberNewlyIgnoredEvent(abtractLog);
138-
result = SaveResultEnum.OutOfScope;
139+
result = SaveResultEnum.UrlOutOfScope;
139140
}
140141

141142
// Update stats
@@ -145,8 +146,9 @@ private async Task<ImportStat> SaveToSqlAllTheThings(ActivityReportSet activitie
145146
listOfActivitiesSavedToSQL.Add(abtractLog);
146147
}
147148
else if (result == SaveResultEnum.ProcessedAlready) stats.ProcessedAlready++;
148-
else if (result == SaveResultEnum.OutOfScope) stats.URLsOutOfScope++;
149-
else throw new InvalidOperationException("Unexpected save result");
149+
else if (result == SaveResultEnum.UrlOutOfScope) stats.URLsOutOfScope++;
150+
else if (result == SaveResultEnum.UserOutOfScope) stats.UsersOutOfScope++;
151+
else _telemetry.LogError($"Unexpected log result for log {abtractLog.Id}");
150152

151153
processedIds.Add(abtractLog.Id);
152154
}

src/AnalyticsEngine/WebJob.Office365ActivityImporter.Engine/Entities/ImportStat.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class ImportStat
1212
public int Imported { get; set; }
1313
public int ProcessedAlready { get; set; }
1414
public int URLsOutOfScope { get; set; }
15+
public int UsersOutOfScope { get; set; }
1516
public int DownloadErrors { get; set; }
1617
public int Total { get; set; }
1718

@@ -36,6 +37,7 @@ public override string ToString()
3637
$"Imported successfully: {this.Imported.ToString("n0")}, " +
3738
$"already processed: {this.ProcessedAlready.ToString("n0")}, " +
3839
$"URLs out of scope (orgs table): {this.URLsOutOfScope.ToString("n0")}, " +
40+
$"users out of scope: {this.UsersOutOfScope.ToString("n0")}, " +
3941
$"errors: {this.DownloadErrors.ToString("n0")}, " +
4042
$"total: {this.Total.ToString("n0")}";
4143
}

src/AnalyticsEngine/WebJob.Office365ActivityImporter.Engine/Entities/Serialisation/CommonAuditLogContent.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public enum SaveResultEnum
127127
NotSaved = 0, // Default
128128
ProcessedAlready = 1, // Event ignored previously
129129
Imported = 2, // Already imported
130-
OutOfScope = 3 // Not to be imported. Usually because the SharePoint URL is for a site we don't care about.
130+
UrlOutOfScope = 3, // Not to be imported. Usually because the SharePoint URL is for a site we don't care about.
131+
UserOutOfScope = 4, // Not to be imported. Usually because the user is outside group filter
131132
}
132133
}

src/AnalyticsEngine/WebJob.Office365ActivityImporter.Engine/Graph/Teams/TeamTokenManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ public class TeamTokenManager
1414
{
1515
public TeamTokenManager(O365Team team, AppConfig appConfig, ILogger logger)
1616
{
17-
if (appConfig.ConnectionStrings.RedisConnectionString != null)
17+
if (!string.IsNullOrEmpty(appConfig.ConnectionStrings.RedisConnectionString))
1818
{
1919
this.CacheConnectionManager = CacheConnectionManager.GetConnectionManager(appConfig.ConnectionStrings.RedisConnectionString);
2020
}
2121
else
2222
{
23-
logger.LogWarning("No redis connection string found in app config. No caching will be done.");
23+
logger.LogWarning("No redis connection string found in config. No deep Teams analytics will be possible.");
2424
}
2525
this.Team = team;
2626
}

src/AnalyticsEngine/WebJob.Office365ActivityImporter.Engine/Graph/User/UserMetadataUpdater.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public UserMetadataUpdater(AnalyticsLogger telemetry, AppConfig settings, TokenC
3737

3838

3939
IDeltaValueProvider deltaProvider = null;
40-
if (settings.ConnectionStrings.RedisConnectionString != null)
40+
if (!string.IsNullOrEmpty(settings.ConnectionStrings.RedisConnectionString))
4141
{
4242
deltaProvider = new RedisProcessDeltaValueProvider(settings, telemetry);
4343
telemetry.LogInformation($"User import - using Redis for delta token cache.");

src/AnalyticsEngine/WebJob.Office365ActivityImporter/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ static async Task MainAsync(string[] args)
205205
using (var db = new AnalyticsEntitiesContext())
206206
{
207207
var sqlUsageBuilder = new SqlUsageStatsBuilder(db, telemetry, configuredSettings.TenantGUID);
208-
if (configuredSettings.ConnectionStrings.RedisConnectionString != null)
208+
if (!string.IsNullOrEmpty(configuredSettings.ConnectionStrings.RedisConnectionString))
209209
{
210210
var redisDatesAdaptor = new RedisStatsDatesLoader(configuredSettings);
211211

@@ -259,7 +259,7 @@ private static void TestDB(ILogger debugTracer)
259259
/// </summary>
260260
private static void PrintStartupDetails(AppConfig settings, ILogger telemetry)
261261
{
262-
ConsoleApp.PrintStartupAndLoggingConfig(telemetry);
262+
ConsoleApp.PrintStartupAndLoggingConfig(settings.ConnectionStrings.DatabaseConnectionString, settings.BuildLabel, settings.UserGroupsFilter, telemetry);
263263

264264
var efConnectionString = ConfigurationManager.ConnectionStrings["SPOInsightsEntities"].ConnectionString;
265265
var sqlConnectionInfo = new System.Data.SqlClient.SqlConnectionStringBuilder(efConnectionString);

src/AnalyticsEngine/WebJob.Office365ActivityImporter/ProgramTasks.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ async Task InitAuth()
9191
_graphClient.HttpProvider.OverallTimeout = TimeSpan.FromHours(1);
9292
_manualGraphCallClient = new ManualGraphCallClient(_graphAppIndentityOAuthContext, _telemetry);
9393
_graphUserGroupsCache = new GraphUserGroupsCache(_manualGraphCallClient, _telemetry);
94+
95+
9496
_isInitialized = true;
9597

9698
}

0 commit comments

Comments
 (0)