Skip to content

Commit

Permalink
Fixed bug in Server Service detection & Added button for Service dete…
Browse files Browse the repository at this point in the history
…ction
  • Loading branch information
simonegli8 committed Oct 14, 2024
1 parent d30987f commit 78a38c9
Show file tree
Hide file tree
Showing 15 changed files with 944 additions and 835 deletions.
38 changes: 29 additions & 9 deletions SolidCP/Sources/SolidCP.EnterpriseServer.Code/Data/DataProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ public bool AlwaysUseEntityFramework
}
return alwaysUseEntityFramework ?? false;
}
set {
set
{
alwaysUseEntityFramework = value;
useEntityFramework = null;
}
Expand Down Expand Up @@ -12597,6 +12598,7 @@ COMMIT TRAN
var dnsRecords = ResourceGroupDnsRecords
.Where(r => r.GroupId == groupId)
.OrderBy(r => r.RecordOrder)
.AsEnumerable()
.Select(r => new Data.Entities.GlobalDnsRecord
{
RecordType = r.RecordType,
Expand All @@ -12613,7 +12615,6 @@ COMMIT TRAN

transaction.Commit();
}

return serviceId;
}
else
Expand All @@ -12637,6 +12638,11 @@ COMMIT TRAN
}
}

public IEnumerable<int> GetServiceIdsByServerId(int serverId) =>
Services
.Where(s => s.ServerId == serverId)
.Select(s => s.ProviderId);

public void UpdateServiceFully(int serviceId, int providerId, string serviceName, int serviceQuotaValue,
int clusterId, string comments)
{
Expand Down Expand Up @@ -17697,7 +17703,8 @@ FROM PackageQuotas AS PQ
})
.ToArray();
return quotas
.Select(q => new ExceedingQuota() {
.Select(q => new ExceedingQuota()
{
QuotaId = q.QuotaId,
QuotaName = q.QuotaName,
QuotaValue = CheckExceedingQuota(packageId, q.QuotaId, q.QuotaTypeId)
Expand Down Expand Up @@ -23500,10 +23507,16 @@ ORDER BY RG.GroupOrder
})
.Where(g => g.BytesTotal > 0)
.OrderBy(g => g.GroupOrder)
.Select(g => new {
g.GroupId, g.GroupName,
g.MegaBytesSent, g.MegaBytesReceived, g.MegaBytesTotal,
g.BytesSent, g.BytesReceived, g.BytesTotal
.Select(g => new
{
g.GroupId,
g.GroupName,
g.MegaBytesSent,
g.MegaBytesReceived,
g.MegaBytesTotal,
g.BytesSent,
g.BytesReceived,
g.BytesTotal
});
return EntityDataSet(packages);
}
Expand Down Expand Up @@ -23597,7 +23610,10 @@ ORDER BY RG.GroupOrder
.OrderBy(g => g.GroupOrder)
.Select(g => new
{
g.GroupId, g.GroupName, g.Diskspace, g.DiskspaceBytes
g.GroupId,
g.GroupName,
g.Diskspace,
g.DiskspaceBytes
});

return EntityDataSet(packages);
Expand Down Expand Up @@ -25601,7 +25617,11 @@ ORDER BY STP.ParameterOrder
.OrderBy(s => s.ParameterOrder)
.Select(s => new
{
s.ScheduleId, s.ParameterId, s.DataTypeId, s.DefaultValue, s.ParameterValue
s.ScheduleId,
s.ParameterId,
s.DataTypeId,
s.DefaultValue,
s.ParameterValue
});

return EntityDataReader(parameters);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ public void AddAuditLogRecord(string recordId, int severityId, int userId, strin
{
try
{
Database.AddAuditLogRecord(recordId, severityId, userId, username, packageId, itemId, itemName,
using (var database = new DataProvider()) database.AddAuditLogRecord(recordId, severityId, userId, username, packageId, itemId, itemName,
startDate, finishDate, sourceName, taskName, executionLog);
}
catch { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ public void GetServerPlatform(string serverUrl, string password, bool passwordIs
}
}

private void FindServices(ServerInfo server)
private void DiscoverServices(ServerInfo server)
{
try
{
Expand All @@ -371,8 +371,10 @@ private void FindServices(ServerInfo server)
throw new ApplicationException("Could not get providers list.");
}

var installedServiceIds = Database.GetServiceIdsByServerId(server.ServerId)
.ToHashSet();
var discovery = providers
.Where(provider => !provider.DisableAutoDiscovery);
.Where(provider => !provider.DisableAutoDiscovery && !installedServiceIds.Contains(provider.ProviderId));

foreach (var provider in discovery)
{
Expand All @@ -387,11 +389,12 @@ private void FindServices(ServerInfo server)
service.ServerId = server.ServerId;
service.ProviderId = provider.ProviderId;
service.ServiceName = provider.DisplayName;
AddService(service);
using (var clone = AsAsync<ServerController>()) clone.AddService(service);
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
throw;
}
}
}
Expand All @@ -413,6 +416,39 @@ private void FindServices(ServerInfo server)
}
}

public int DiscoverAndAddServices(int serverId)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive
| DemandAccount.IsAdmin);
if (accountCheck < 0) return accountCheck;

var server = GetServerById(serverId, true);

// init passwords
if (server.Password == null)
server.Password = "";
if (server.ADPassword == null)
server.ADPassword = "";

TaskManager.StartTask("SERVER", "DISCOVER_AND_ADD_SERVICES", server.ServerName);

try
{
DiscoverServices(server);
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
}

TaskManager.ItemId = server.ServerId;

TaskManager.CompleteTask();

return server.ServerId;
}

public int AddServer(ServerInfo server, bool autoDiscovery)
{
// check account
Expand Down Expand Up @@ -457,7 +493,7 @@ public int AddServer(ServerInfo server, bool autoDiscovery)
server.ServerId = serverId;
try
{
FindServices(server);
DiscoverServices(server);
}
catch (Exception ex)
{
Expand Down
35 changes: 19 additions & 16 deletions SolidCP/Sources/SolidCP.EnterpriseServer.Code/Tasks/TaskManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -295,27 +295,30 @@ public void WriteError(string text, params string[] textParameters)

private void WriteLogRecord(Guid guid, int severity, string text, string stackTrace, params string[] textParameters)
{
List<BackgroundTask> tasks = TaskController.GetTasks(guid);

if (tasks.Count > 0)
using (var taskController = AsAsync<TaskManager>().TaskController)
{
BackgroundTask rootTask = tasks[0];
List<BackgroundTask> tasks = taskController.GetTasks(guid);

BackgroundTaskLogRecord log = new BackgroundTaskLogRecord(
rootTask.Id,
tasks.Count - 1,
false,
text,
stackTrace,
textParameters);
if (tasks.Count > 0)
{
BackgroundTask rootTask = tasks[0];

TaskController.AddLog(log);
BackgroundTaskLogRecord log = new BackgroundTaskLogRecord(
rootTask.Id,
tasks.Count - 1,
false,
text,
stackTrace,
textParameters);

if (severity > rootTask.Severity)
{
rootTask.Severity = severity;
taskController.AddLog(log);

TaskController.UpdateTask(rootTask);
if (severity > rootTask.Severity)
{
rootTask.Severity = severity;

taskController.UpdateTask(rootTask);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,18 +431,14 @@ public UserInfo GetUserByUsernamePassword(string username, string password, stri
// compare user passwords
if (CryptoUtils.SHAEquals(user.Password, password) || user.Password == password)
{
// Queue call to AuditLog for better speed in SOAP calls (except for SQLite)
if (!Database.IsSqlite)
// Queue call to AuditLog for better speed in SOAP calls
/* ThreadPool.QueueUserWorkItem(state =>
{
ThreadPool.QueueUserWorkItem(state =>
using (var asyncController = AsAsync<UserController>())
{
using (var asyncController = AsAsync<UserController>())
{
asyncController.AuditLog.AddAuditLogInfoRecord("USER", "GET_BY_USERNAME_PASSWORD", username, new string[] { "IP: " + ip });
}
});
}
else AuditLog.AddAuditLogInfoRecord("USER", "GET_BY_USERNAME_PASSWORD", username, new string[] { "IP: " + ip });
asyncController.AuditLog.AddAuditLogInfoRecord("USER", "GET_BY_USERNAME_PASSWORD", username, new string[] { "IP: " + ip });
}
}); */

CachedUsers.AddToCache(user);

Expand Down
3 changes: 3 additions & 0 deletions SolidCP/Sources/SolidCP.EnterpriseServer/esServers.asmx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ public int AddServer(ServerInfo server, bool autoDiscovery)
}

[WebMethod]
public int DiscoverAndAddServices(int serverId) => ServerController.DiscoverAndAddServices(serverId);

[WebMethod]
public int UpdateServer(ServerInfo server)
{
return ServerController.UpdateServer(server);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2029,6 +2029,10 @@ Public Class MailEnable
key = Registry.LocalMachine.OpenSubKey("SOFTWARE\Mail Enable\Mail Enable")
End If

If (key Is Nothing) Then
Return False
End If

version = CStr(key.GetValue("Enterprise Version"))
If (version Is Nothing) Then
version = CStr(key.GetValue("Version"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4974,7 +4974,7 @@
<data name="ErrorDescription.VPS_LOAD_VM_ITEM" xml:space="preserve">
<value>Mögliche Ursachen für diesen Fehler sind:&lt;br/&gt;1. Die dem VPS-Metaeintrag zugeordnete virtuelle Maschine wurde vom Virtualisierungsserver gelöscht.&lt;br/&gt;2. Hyper-V-Verwaltungsdienst wurde gestoppt.&lt;br/&gt;3. Keine Verbindung zum, auf dem Virtualisierungsserver installierten, SolidCP-Server.&lt;br/&gt;&lt;br/&gt;Lösungen:&lt;br/&gt;1. Stellen Sie sicher, dass die zugeordnete virtuelle Maschine auf dem Hyper-V-Server existiert; andernfalls erstellen Sie diese VPS aus SolidCP erneut.&lt;br/&gt;2. Überprüfen Sie, dass der Hyper-V-Verwaltungsdienst gestartet ist.&lt;br/&gt;3. Überprüfen Sie die SolidCP-Serververbindung.</value>
</data>
<data name="ErrorDescription.VPS_LOAD_PVEVM_ITEM" xml:space="preserve">
<data name="ErrorDescription.VPS_LOAD_PVEVM_ITEM" xml:space="preserve">
<value>Mögliche Ursachen für diesen Fehler sind:&lt;br/&gt;1. Die dem VPS-Metaeintrag zugeordnete virtuelle Maschine wurde vom Virtualisierungsserver gelöscht.&lt;br/&gt;2. Proxmox-Verwaltungsdienst wurde gestoppt.&lt;br/&gt;3. Keine Verbindung zum, auf dem Virtualisierungsserver installierten, SolidCP-Server.&lt;br/&gt;&lt;br/&gt;Lösungen:&lt;br/&gt;1. Stellen Sie sicher, dass die zugeordnete virtuelle Maschine auf dem Proxmox-Server existiert; andernfalls erstellen Sie diese VPS aus SolidCP erneut.&lt;br/&gt;2. Überprüfen Sie, dass der Proxmox-Verwaltungsdienst gestartet ist.&lt;br/&gt;3. Überprüfen Sie die SolidCP-Serververbindung.</value>
</data>
<data name="ErrorDescription.VPS_PROVISION_ERROR" xml:space="preserve">
Expand Down Expand Up @@ -6963,9 +6963,6 @@
<data name="AuditLogTask.VPS2012_RESTORE_DMZ_IP" xml:space="preserve">
<value>Restore DMZ IP</value>
</data>
<data name="AuditLogTask.VPS2012_RESTORE_DMZ_IP" xml:space="preserve">
<value>Restore DMZ IP</value>
</data>
<data name="AuditLogTask.VPS2012_SET_PRIMARY_EXTERNAL_IP" xml:space="preserve">
<value>Primäre externe IP festlegen</value>
</data>
Expand Down Expand Up @@ -7074,4 +7071,7 @@
<data name="Error.VPS_LOAD_PVEVM_ITEM" xml:space="preserve">
<value>Fehler beim Laden der virtellen Maschineninformationen</value>
</data>
<data name="Error.SERVER_DISCOVER_SERVICES" xml:space="preserve">
<value>Fehler beim Suchen nach Software</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -1362,9 +1362,12 @@
<data name="Success.SERVER_UPDATE_SERVER_PSW" xml:space="preserve">
<value>Server password has been updated</value>
</data>
<data name="Error.STATS_UPDATE_STAT" xml:space="preserve">
<data name="Error.STATS_UPDATE_STAT" xml:space="preserve">
<value>Error updating advanced statistics site</value>
</data>
<data name="Error.SERVER_DISCOVER_SERVICES" xml:space="preserve">
<value>Error searching for software</value>
</data>
<data name="Error.109" xml:space="preserve">
<value>User with specified username was not found</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ADHeader.Text" xml:space="preserve">
<value>Active Directory-Einstellungen</value>
Expand Down Expand Up @@ -267,4 +267,7 @@
<data name="btnUpdateText.Text" xml:space="preserve">
<value>Aktualisieren</value>
</data>
<data name="btnDiscoverServices.Text" xml:space="preserve">
<value>Suche installierte Software</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -276,4 +276,7 @@
<data name="lblAdParentDomainController.text" xml:space="preserve">
<value>Parent Domain Controller:</value>
</data>
<data name="btnDiscoverServices.Text" xml:space="preserve">
<value>Search Installed Software</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ protected void Page_Load(object sender, EventArgs e)
BindServices();
}

private void BindServices()
public void BindServices()
{
dsServices = ES.Services.Servers.GetRawServicesByServerId(PanelRequest.ServerId);
dlServiceGroups.DataSource = dsServices.Tables[0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,17 @@
TargetControlID="ServicesPanel" ResourceKey="ServicesHeader" Text="Services"></scp:CollapsiblePanel>
<asp:Panel ID="ServicesPanel" runat="server" Height="0" Style="overflow: hidden;">
<table width="100%">
<tr>
<td class="Normal">
<div>
<asp:Button ID="btnDiscoverServices" meta:resourcekey="btnDiscoverServices" runat="server" CssClass="btn btn-primary" CausesValidation="false" OnClick="btnDiscoverServices_Click" OnClientClick="ShowProgressDialog('Search installed software...');" Text = "'Search installed software" />
</div>
<div>&nbsp;</div>
</td>
</tr>
<tr>
<td>
<uc4:ServerServicesControl ID="ServerServicesControl1" runat="server"></uc4:ServerServicesControl>
<uc4:ServerServicesControl ID="ServerServicesControl" runat="server"></uc4:ServerServicesControl>
</td>
</tr>
</table>
Expand Down
Loading

0 comments on commit 78a38c9

Please sign in to comment.