/// <summary> /// Collect a JSON log to Azure Log Analytics /// </summary> /// <param name="logType">Name of the Type of Log. Can be any name you want to appear on Azure Log Analytics.</param> /// <param name="json">JSON string. Can be an array or single object.</param> /// <param name="apiVersion">Optional. Api Version.</param> /// <param name="timeGeneratedPropertyName"></param> public async Task Collect(string json, string logType = "ApplicationLog", string apiVersion = "2016-04-01", string timeGeneratedPropertyName = null) { if (!json.Contains("{")) { await Collect(LogMessage.Log(json)); return; // dont double log } string logUri = $"https://{_workspaceId}.ods.opinsights.azure.com/api/logs?api-version={apiVersion}"; var dateTimeNow = DateTime.UtcNow.ToString("r"); var authSignature = GetAuthSignature(json, dateTimeNow); try { await SendLog(json, logType, authSignature, dateTimeNow, logUri); } catch (Exception excep) { Consoler.Error("API Post Exception", excep); int breaker = 0; bool success = false; while (!success && breaker < 10) { try { System.Threading.Thread.Sleep(1000); await SendLog(json, logType, authSignature, dateTimeNow, logUri); success = true; } catch (Exception e) { Consoler.Error("API Post Exception 2", excep); } finally { breaker++; } } if (!success) { throw new ApplicationException("LogAnalyticsDataCollector failed over 10 times to record log", excep); } } }
public static void DeleteAllTables(string connectionString) { try { ExecuteSqlsWithTrans(connectionString, DropTables); ExecuteSqlsWithTrans(connectionString, DropViews); } catch (Exception ex) { Consoler.Warn(ex.ToString()); } try { SetupMsSpForEach(connectionString); const string sql = @"DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR SET @Cursor = CURSOR FAST_FORWARD FOR SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']' FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1 LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME =rc1.CONSTRAINT_NAME OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql WHILE (@@FETCH_STATUS = 0) BEGIN Exec SP_EXECUTESQL @Sql FETCH NEXT FROM @Cursor INTO @Sql END CLOSE @Cursor DEALLOCATE @Cursor EXEC sp_MSForEachTable 'DROP TABLE ?' "; ExecuteSqlsWithTrans(connectionString, sql); } catch (Exception ex) { Consoler.Error(ex.ToString()); } }