Skip to content

Commit

Permalink
Add GUI support for triggering schema snapshots for database
Browse files Browse the repository at this point in the history
Trigger schema snapshot for a specific database
  • Loading branch information
DavidWiseman committed Jun 22, 2024
1 parent 3b70b2c commit e63cb5b
Show file tree
Hide file tree
Showing 5 changed files with 618 additions and 494 deletions.
3 changes: 2 additions & 1 deletion DBADashDB/dbo/Stored Procedures/DDLSnapshots_Get.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
@PageNumber INT=1
)
AS
SELECT I.InstanceGroupName,
SELECT I.InstanceID,
I.InstanceGroupName,
ss.DatabaseID,
ss.SnapshotDate,
ss.ValidatedDate,
Expand Down
20 changes: 11 additions & 9 deletions DBADashGUI/Messaging/CollectionMessaging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,19 +45,19 @@ public static async Task TriggerCollection(string connectionID, string type, int
}

public static async Task TriggerCollection(string connectionID, List<string> types, int collectAgentID, int importAgentID,
ISetStatus control)
ISetStatus control,string db=null)
{
if (PendingRequests >= PendingRequestsThreshold)
{
control.SetStatus("Too many pending requests", null, DashColors.Fail);
return;
}

var key = db == null ? connectionID : connectionID + "\\" + db;
foreach (var type in types)
{
if (IsRecentlyTriggered(connectionID, type) && !RecentlyTriggeredExcludedList.Exists(ct => Enum.GetName(ct) == type))
if (IsRecentlyTriggered(key, type) && !RecentlyTriggeredExcludedList.Exists(ct => Enum.GetName(ct) == type))
{
control.SetStatus($"Collection {type} already triggered recently for {connectionID}", null, DashColors.Fail);
control.SetStatus($"Collection {type} already triggered recently for {key}", null, DashColors.Fail);
return;
}
else if (type is "QueryText" or "QueryPlans")
Expand All @@ -68,24 +68,26 @@ public static async Task TriggerCollection(string connectionID, string type, int
}

var typesString = string.Join(", ", types.Select(s => s.ToString()));
var messageBase = $"{typesString} collection for {connectionID}: ";
var messageBase = $"{typesString} collection for {key}: ";


var collectAgent = DBADashAgent.GetDBADashAgent(Common.ConnectionString, collectAgentID);
var importAgent = DBADashAgent.GetDBADashAgent(Common.ConnectionString, importAgentID);
var x = new CollectionMessage(types, connectionID) { CollectAgent = collectAgent, ImportAgent = importAgent };
var x = new CollectionMessage(types, connectionID) { CollectAgent = collectAgent, ImportAgent = importAgent, DatabaseName = db};

var payload = x.Serialize();
var messageGroup = Guid.NewGuid();
await MessageProcessing.SendMessageToService(payload, importAgentID, messageGroup, Common.ConnectionString, CollectionDialogLifetime);
control.SetStatus(messageBase + "SENT", "", DashColors.Information);
foreach (var type in types)
{
UpdateLastTriggeredTime(connectionID, type);
UpdateLastTriggeredTime(key, type);
}
IncrementPendingRequests();
await Task.Run(() => ReceiveReply(messageGroup, messageBase, control));
}

public static async Task TriggerCollection(int InstanceID, List<CollectionType> types, ISetStatus control)
public static async Task TriggerCollection(int InstanceID, List<CollectionType> types, ISetStatus control,string db=null)
{
var row = CommonData.Instances.AsEnumerable().FirstOrDefault(i => (int)i["InstanceID"] == InstanceID);
if (row == null) return;
Expand All @@ -98,7 +100,7 @@ public static async Task TriggerCollection(int InstanceID, List<CollectionType>
MessageBox.Show("Messaging is not enabled for this instance", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
await TriggerCollection(connectionID, types.Select(Enum.GetName).ToList(), collectAgentID, importAgentID, control);
await TriggerCollection(connectionID, types.Select(Enum.GetName).ToList(), collectAgentID, importAgentID, control,db);
}

public static async Task TriggerCollection(int InstanceID, CollectionType type, ISetStatus control)
Expand Down
Loading

0 comments on commit e63cb5b

Please sign in to comment.