This commit is contained in:
vfedosevich 2014-12-17 05:56:16 -08:00
commit 874170030e
8 changed files with 138 additions and 51 deletions

View file

@ -6085,7 +6085,13 @@ GO
IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'SERVER_NAME' ) IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'SERVER_NAME' )
BEGIN BEGIN
INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'SERVER_NAME', N'String', NULL, 3) INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_DOMAIN_LOOKUP', N'SERVER_NAME', N'String', N'', 3)
END
GO
IF EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'SERVER_NAME' )
BEGIN
UPDATE [dbo].[ScheduleTaskParameters] SET [DefaultValue] = N'' WHERE [TaskID] = N'SCHEDULE_TASK_DOMAIN_LOOKUP' AND [ParameterID]= N'SERVER_NAME'
END END
GO GO
@ -6581,6 +6587,24 @@ SELECT
WHERE [DomainId] = @DomainId AND [RecordType] = @RecordType WHERE [DomainId] = @DomainId AND [RecordType] = @RecordType
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetDomainAllDnsRecords')
DROP PROCEDURE GetDomainAllDnsRecords
GO
CREATE PROCEDURE [dbo].GetDomainAllDnsRecords
(
@DomainId INT
)
AS
SELECT
ID,
DomainId,
DnsServer,
RecordType,
Value,
Date
FROM [dbo].[DomainDnsRecords]
WHERE [DomainId] = @DomainId
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddDomainDnsRecord') IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddDomainDnsRecord')
@ -6668,6 +6692,20 @@ AS
UPDATE [dbo].[Domains] SET [LastUpdateDate] = @Date WHERE [DomainID] = @DomainId UPDATE [dbo].[Domains] SET [LastUpdateDate] = @Date WHERE [DomainID] = @DomainId
GO GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateDomainDates')
DROP PROCEDURE UpdateDomainDates
GO
CREATE PROCEDURE [dbo].UpdateDomainDates
(
@DomainId INT,
@DomainCreationDate DateTime,
@DomainExpirationDate DateTime,
@DomainLastUpdateDate DateTime
)
AS
UPDATE [dbo].[Domains] SET [CreationDate] = @DomainCreationDate, [ExpirationDate] = @DomainExpirationDate, [LastUpdateDate] = @DomainLastUpdateDate WHERE [DomainID] = @DomainId
GO
--Updating Domain procedures --Updating Domain procedures

View file

@ -4744,9 +4744,19 @@ namespace WebsitePanel.EnterpriseServer
); );
} }
public static IDataReader GetDomainAllDnsRecords(int domainId)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetDomainAllDnsRecords",
new SqlParameter("@DomainId", domainId)
);
}
public static void AddDomainDnsRecord(DnsRecordInfo domainDnsRecord) public static void AddDomainDnsRecord(DnsRecordInfo domainDnsRecord)
{ {
SqlHelper.ExecuteReader( SqlHelper.ExecuteNonQuery(
ConnectionString, ConnectionString,
CommandType.StoredProcedure, CommandType.StoredProcedure,
"AddDomainDnsRecord", "AddDomainDnsRecord",
@ -4770,7 +4780,7 @@ namespace WebsitePanel.EnterpriseServer
public static void DeleteDomainDnsRecord(int id) public static void DeleteDomainDnsRecord(int id)
{ {
SqlHelper.ExecuteReader( SqlHelper.ExecuteNonQuery(
ConnectionString, ConnectionString,
CommandType.StoredProcedure, CommandType.StoredProcedure,
"DeleteDomainDnsRecord", "DeleteDomainDnsRecord",
@ -4795,7 +4805,7 @@ namespace WebsitePanel.EnterpriseServer
private static void UpdateDomainDate(int domainId, string stroredProcedure, DateTime date) private static void UpdateDomainDate(int domainId, string stroredProcedure, DateTime date)
{ {
SqlHelper.ExecuteReader( SqlHelper.ExecuteNonQuery(
ConnectionString, ConnectionString,
CommandType.StoredProcedure, CommandType.StoredProcedure,
stroredProcedure, stroredProcedure,
@ -4804,6 +4814,19 @@ namespace WebsitePanel.EnterpriseServer
); );
} }
public static void UpdateDomainDates(int domainId, DateTime? domainCreationDate, DateTime? domainExpirationDate, DateTime? domainLastUpdateDate)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"UpdateDomainDates",
new SqlParameter("@DomainId", domainId),
new SqlParameter("@DomainCreationDate", domainCreationDate),
new SqlParameter("@DomainExpirationDate", domainExpirationDate),
new SqlParameter("@DomainLastUpdateDate", domainLastUpdateDate)
);
}
#endregion #endregion
} }

View file

@ -5,6 +5,7 @@ using System.Linq;
using System.Net.Mail; using System.Net.Mail;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading;
using WebsitePanel.Providers.DomainLookup; using WebsitePanel.Providers.DomainLookup;
using Whois.NET; using Whois.NET;
@ -31,6 +32,8 @@ namespace WebsitePanel.EnterpriseServer
var checkedDomains = new List<int>(); var checkedDomains = new List<int>();
var expiredDomains = new List<DomainInfo>(); var expiredDomains = new List<DomainInfo>();
var nonExistenDomains = new List<DomainInfo>(); var nonExistenDomains = new List<DomainInfo>();
var subDomains = new List<DomainInfo>();
var allTopLevelDomains = new List<DomainInfo>();
// get input parameters // get input parameters
int daysBeforeNotify; int daysBeforeNotify;
@ -55,10 +58,12 @@ namespace WebsitePanel.EnterpriseServer
{ {
var domains = ServerController.GetDomains(package.PackageId); var domains = ServerController.GetDomains(package.PackageId);
var subDomains = domains.Where(x => x.IsSubDomain).ToList(); subDomains.AddRange(domains.Where(x => x.IsSubDomain));
var topLevelDomains = domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains var topLevelDomains = domains = domains.Where(x => !x.IsSubDomain && !x.IsDomainPointer).ToList(); //Selecting top-level domains
allTopLevelDomains.AddRange(topLevelDomains);
domains = topLevelDomains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains domains = topLevelDomains.Where(x => x.CreationDate == null || x.ExpirationDate == null ? true : CheckDomainExpiration(x.ExpirationDate, daysBeforeNotify)).ToList(); // selecting expired or with empty expire date domains
var domainUser = UserController.GetUser(package.UserId); var domainUser = UserController.GetUser(package.UserId);
@ -88,16 +93,23 @@ namespace WebsitePanel.EnterpriseServer
{ {
nonExistenDomains.Add(domain); nonExistenDomains.Add(domain);
} }
Thread.Sleep(100);
} }
}
subDomains = subDomains.GroupBy(p => p.DomainId).Select(g => g.First()).ToList();
allTopLevelDomains = allTopLevelDomains.GroupBy(p => p.DomainId).Select(g => g.First()).ToList();
foreach (var subDomain in subDomains) foreach (var subDomain in subDomains)
{ {
var mainDomain = topLevelDomains.Where(x => subDomain.DomainName.ToLowerInvariant().Contains(x.DomainName.ToLowerInvariant())).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ; var mainDomain = allTopLevelDomains.Where(x => subDomain.DomainName.ToLowerInvariant().Contains(x.DomainName.ToLowerInvariant())).OrderByDescending(s => s.DomainName.Length).FirstOrDefault(); ;
if (mainDomain != null) if (mainDomain != null)
{ {
ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate); ServerController.UpdateDomainRegistrationData(subDomain, mainDomain.CreationDate, mainDomain.ExpirationDate);
}
Thread.Sleep(100);
} }
} }

View file

@ -5,6 +5,7 @@ using System.Linq;
using System.Net.Mail; using System.Net.Mail;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading;
using WebsitePanel.Providers.DNS; using WebsitePanel.Providers.DNS;
using WebsitePanel.Providers.DomainLookup; using WebsitePanel.Providers.DomainLookup;
using WebsitePanel.Server; using WebsitePanel.Server;
@ -85,8 +86,7 @@ namespace WebsitePanel.EnterpriseServer
DomainDnsChanges domainChanges = new DomainDnsChanges(); DomainDnsChanges domainChanges = new DomainDnsChanges();
domainChanges.DomainName = domain.DomainName; domainChanges.DomainName = domain.DomainName;
var mxRecords = ObjectUtils.CreateListFromDataReader<DnsRecordInfo>(DataProvider.GetDomainDnsRecords(domain.DomainId, DnsRecordType.MX)); var dbDnsRecords = ObjectUtils.CreateListFromDataReader<DnsRecordInfo>(DataProvider.GetDomainAllDnsRecords(domain.DomainId));
var nsRecords = ObjectUtils.CreateListFromDataReader<DnsRecordInfo>(DataProvider.GetDomainDnsRecords(domain.DomainId, DnsRecordType.NS));
//execute server //execute server
foreach (var dnsServer in dnsServers) foreach (var dnsServer in dnsServers)
@ -97,16 +97,14 @@ namespace WebsitePanel.EnterpriseServer
FillRecordData(dnsMxRecords, domain, dnsServer); FillRecordData(dnsMxRecords, domain, dnsServer);
FillRecordData(dnsNsRecords, domain, dnsServer); FillRecordData(dnsNsRecords, domain, dnsServer);
domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(mxRecords, dnsMxRecords, dnsServer)); domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.MX), dnsMxRecords, dnsServer));
domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(nsRecords, dnsNsRecords, dnsServer)); domainChanges.DnsChanges.AddRange(ApplyDomainRecordsChanges(dbDnsRecords.Where(x => x.RecordType == DnsRecordType.NS), dnsNsRecords, dnsServer));
} }
domainsChanges.Add(domainChanges); domainsChanges.Add(domainChanges);
} }
} }
TaskManager.Write(string.Format("Domains checked: {0}", domainsChanges.Count));
var changedDomains = FindDomainsWithChangedRecords(domainsChanges); var changedDomains = FindDomainsWithChangedRecords(domainsChanges);
SendMailMessage(user, changedDomains); SendMailMessage(user, changedDomains);
@ -200,6 +198,8 @@ namespace WebsitePanel.EnterpriseServer
private void RemoveRecord(DnsRecordInfo dnsRecord) private void RemoveRecord(DnsRecordInfo dnsRecord)
{ {
DataProvider.DeleteDomainDnsRecord(dnsRecord.Id); DataProvider.DeleteDomainDnsRecord(dnsRecord.Id);
Thread.Sleep(100);
} }
private void AddRecords(IEnumerable<DnsRecordInfo> dnsRecords) private void AddRecords(IEnumerable<DnsRecordInfo> dnsRecords)
@ -213,6 +213,8 @@ namespace WebsitePanel.EnterpriseServer
private void AddRecord(DnsRecordInfo dnsRecord) private void AddRecord(DnsRecordInfo dnsRecord)
{ {
DataProvider.AddDomainDnsRecord(dnsRecord); DataProvider.AddDomainDnsRecord(dnsRecord);
Thread.Sleep(100);
} }
private void SendMailMessage(UserInfo user, IEnumerable<DomainDnsChanges> domainsChanges) private void SendMailMessage(UserInfo user, IEnumerable<DomainDnsChanges> domainsChanges)

View file

@ -2680,26 +2680,20 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain) public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain)
{ {
DateTime? createdDate = null;
DateTime? expiredDate = null;
try try
{ {
DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now);
var whoisResult = WhoisClient.Query(domain.DomainName.ToLowerInvariant()); var whoisResult = WhoisClient.Query(domain.DomainName.ToLowerInvariant());
var createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns); createdDate = GetDomainInfoDate(whoisResult.Raw, _createdDatePatterns);
var expiredDate = GetDomainInfoDate(whoisResult.Raw, _expiredDatePatterns); expiredDate = GetDomainInfoDate(whoisResult.Raw, _expiredDatePatterns);
if (createdDate != null)
{
domain.CreationDate = createdDate; domain.CreationDate = createdDate;
DataProvider.UpdateDomainCreationDate(domain.DomainId, createdDate.Value);
}
if (expiredDate != null)
{
domain.ExpirationDate = expiredDate; domain.ExpirationDate = expiredDate;
DataProvider.UpdateDomainExpirationDate(domain.DomainId, expiredDate.Value);
} DataProvider.UpdateDomainDates(domain.DomainId, createdDate, expiredDate, DateTime.Now);
} }
catch (Exception e) catch (Exception e)
{ {
@ -2711,19 +2705,10 @@ namespace WebsitePanel.EnterpriseServer
public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate) public static DomainInfo UpdateDomainRegistrationData(DomainInfo domain, DateTime? creationDate, DateTime? expirationDate)
{ {
if (creationDate != null) DataProvider.UpdateDomainDates(domain.DomainId, creationDate, expirationDate, DateTime.Now);
{
domain.CreationDate = creationDate; domain.CreationDate = creationDate;
DataProvider.UpdateDomainCreationDate(domain.DomainId, creationDate.Value);
}
if (expirationDate != null)
{
domain.ExpirationDate = expirationDate; domain.ExpirationDate = expirationDate;
DataProvider.UpdateDomainExpirationDate(domain.DomainId, expirationDate.Value);
}
DataProvider.UpdateDomainLastUpdateDate(domain.DomainId, DateTime.Now);
return domain; return domain;
} }

View file

@ -6,7 +6,8 @@
<asp:Label ID="lblServerName" runat="server" meta:resourcekey="lblServerName">Server Name: </asp:Label> <asp:Label ID="lblServerName" runat="server" meta:resourcekey="lblServerName">Server Name: </asp:Label>
</td> </td>
<td class="Normal" width="100%"> <td class="Normal" width="100%">
<asp:TextBox ID="txtServerName" runat="server" Width="95%" CssClass="NormalTextBox" MaxLength="1000"></asp:TextBox> <asp:DropDownList ID="ddlServers" runat="server" CssClass="NormalTextBox" Width="150px" style="vertical-align: middle;" />
</td>
</tr> </tr>
<tr> <tr>
<td class="SubHead" nowrap> <td class="SubHead" nowrap>

View file

@ -30,7 +30,33 @@ namespace WebsitePanel.Portal.ScheduleTaskControls
this.SetParameter(this.txtDnsServers, DnsServersParameter); this.SetParameter(this.txtDnsServers, DnsServersParameter);
this.SetParameter(this.txtMailTo, MailToParameter); this.SetParameter(this.txtMailTo, MailToParameter);
this.SetParameter(this.txtServerName, ServerNameParameter); this.SetParameter(this.ddlServers, ServerNameParameter);
var servers = ES.Services.Servers.GetAllServers();
var osGroup = ES.Services.Servers.GetResourceGroups().First(x => x.GroupName == ResourceGroups.Os);
var osProviders = ES.Services.Servers.GetProvidersByGroupId(osGroup.GroupId);
var osServers = new List<ServerInfo>();
foreach (var server in servers)
{
var services = ES.Services.Servers.GetServicesByServerId(server.ServerId);
if (services.Any(x => osProviders.Any(p=>p.ProviderId == x.ProviderId)))
{
osServers.Add(server);
}
}
ddlServers.DataSource = osServers.Select(x => new { Id = x.ServerName, Name = x.ServerName });
ddlServers.DataTextField = "Name";
ddlServers.DataValueField = "Id";
ddlServers.DataBind();
ScheduleTaskParameterInfo parameter = this.FindParameterById(ServerNameParameter);
ddlServers.SelectedValue = parameter.ParameterValue;
} }
/// <summary> /// <summary>
@ -41,7 +67,7 @@ namespace WebsitePanel.Portal.ScheduleTaskControls
{ {
ScheduleTaskParameterInfo dnsServers = this.GetParameter(this.txtDnsServers, DnsServersParameter); ScheduleTaskParameterInfo dnsServers = this.GetParameter(this.txtDnsServers, DnsServersParameter);
ScheduleTaskParameterInfo mailTo = this.GetParameter(this.txtMailTo, MailToParameter); ScheduleTaskParameterInfo mailTo = this.GetParameter(this.txtMailTo, MailToParameter);
ScheduleTaskParameterInfo serverName = this.GetParameter(this.txtServerName, ServerNameParameter); ScheduleTaskParameterInfo serverName = this.GetParameter(this.ddlServers, ServerNameParameter);
return new ScheduleTaskParameterInfo[3] { dnsServers, mailTo, serverName }; return new ScheduleTaskParameterInfo[3] { dnsServers, mailTo, serverName };
} }

View file

@ -22,13 +22,13 @@ namespace WebsitePanel.Portal.ScheduleTaskControls {
protected global::System.Web.UI.WebControls.Label lblServerName; protected global::System.Web.UI.WebControls.Label lblServerName;
/// <summary> /// <summary>
/// txtServerName control. /// ddlServers control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtServerName; protected global::System.Web.UI.WebControls.DropDownList ddlServers;
/// <summary> /// <summary>
/// lblDnsServers control. /// lblDnsServers control.