Get server general properties (#2117)

* add server handler

* get server general properties
This commit is contained in:
Barbara Valdez
2023-06-28 16:39:37 -07:00
committed by GitHub
parent 6b251bd24a
commit c2d53a3215
11 changed files with 259 additions and 17 deletions

View File

@@ -40,6 +40,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
this.objectTypeHandlers.Add(new DatabaseRoleHandler(ConnectionService.Instance));
this.objectTypeHandlers.Add(new ServerRoleHandler(ConnectionService.Instance));
this.objectTypeHandlers.Add(new DatabaseHandler(ConnectionService.Instance));
this.objectTypeHandlers.Add(new ServerHandler(ConnectionService.Instance));
}
/// <summary>

View File

@@ -135,12 +135,12 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
DateCreated = smoDatabase.CreateDate.ToString(),
LastDatabaseBackup = smoDatabase.LastBackupDate == DateTime.MinValue ? SR.databaseBackupDate_None : smoDatabase.LastBackupDate.ToString(),
LastDatabaseLogBackup = smoDatabase.LastLogBackupDate == DateTime.MinValue ? SR.databaseBackupDate_None : smoDatabase.LastLogBackupDate.ToString(),
MemoryAllocatedToMemoryOptimizedObjectsInMb = DatabaseUtils.ConvertKbtoMb(smoDatabase.MemoryAllocatedToMemoryOptimizedObjectsInKB),
MemoryUsedByMemoryOptimizedObjectsInMb = DatabaseUtils.ConvertKbtoMb(smoDatabase.MemoryUsedByMemoryOptimizedObjectsInKB),
MemoryAllocatedToMemoryOptimizedObjectsInMb = ByteConverter.ConvertKbtoMb(smoDatabase.MemoryAllocatedToMemoryOptimizedObjectsInKB),
MemoryUsedByMemoryOptimizedObjectsInMb = ByteConverter.ConvertKbtoMb(smoDatabase.MemoryUsedByMemoryOptimizedObjectsInKB),
NumberOfUsers = smoDatabase.Users.Count,
Owner = smoDatabase.Owner,
SizeInMb = smoDatabase.Size,
SpaceAvailableInMb = DatabaseUtils.ConvertKbtoMb(smoDatabase.SpaceAvailable),
SpaceAvailableInMb = ByteConverter.ConvertKbtoMb(smoDatabase.SpaceAvailable),
Status = smoDatabase.Status.ToString()
};
}

View File

@@ -0,0 +1,95 @@
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
using System;
using System.Threading.Tasks;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlTools.ServiceLayer.Connection;
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts;
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.ObjectTypes.Server;
using Microsoft.SqlTools.ServiceLayer.ServerConfigurations;
using Microsoft.SqlTools.ServiceLayer.Utility;
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
{
/// <summary>
/// Server object type handler
/// </summary>
public class ServerHandler : ObjectTypeHandler<ServerInfo, ServerViewContext>
{
private ServerViewInfo serverViewInfo = new ServerViewInfo();
private ServerConfigService configService = new ServerConfigService();
private Server server = null;
public ServerHandler(ConnectionService connectionService) : base(connectionService)
{
}
public override bool CanHandleType(SqlObjectType objectType)
{
return objectType == SqlObjectType.Server;
}
public override Task<InitializeViewResult> InitializeObjectView(InitializeViewRequestParams requestParams)
{
ConnectionInfo connInfo = this.GetConnectionInfo(requestParams.ConnectionUri);
ServerConnection serverConnection = ConnectionService.OpenServerConnection(connInfo, ObjectManagementService.ApplicationName);
using (var context = new ServerViewContext(requestParams, serverConnection))
{
this.server = new Server(context.Connection);
if (this.server != null)
{
this.serverViewInfo.ObjectInfo = new ServerInfo()
{
Name = server.Name,
HardwareGeneration = server.HardwareGeneration,
Language = server.Language,
MemoryInMB = server.PhysicalMemory,
OperatingSystem = server.HostDistribution,
Platform = server.HostPlatform,
Processors = server.Processors,
IsClustered = server.IsClustered,
IsHadrEnabled = server.IsHadrEnabled,
IsPolyBaseInstalled = server.IsPolyBaseInstalled,
IsXTPSupported = server.IsXTPSupported,
Product = server.Product,
ReservedStorageSizeMB = server.ReservedStorageSizeMB,
RootDirectory = server.RootDirectory,
ServerCollation = server.Collation,
ServiceTier = server.ServiceTier,
StorageSpaceUsageInGB = (int)ByteConverter.ConvertMbtoGb(server.UsedStorageSizeMB),
Version = server.Version.ToString(),
MinServerMemory = GetServerMinMemory(),
MaxServerMemory = GetServerMaxMemory()
};
}
return Task.FromResult(new InitializeViewResult { ViewInfo = this.serverViewInfo, Context = context });
}
}
public override Task Save(ServerViewContext context, ServerInfo serverInfo)
{
throw new NotSupportedException("ServerHandler does not support Save method");
}
public override Task<string> Script(ServerViewContext context, ServerInfo obj)
{
throw new NotSupportedException("ServerHandler does not support Script method");
}
private int GetServerMaxMemory()
{
return configService.GetServerSmoConfig(server, configService.MaxServerMemoryPropertyNumber).ConfigValue;
}
private int GetServerMinMemory()
{
return configService.GetServerSmoConfig(server, configService.MinServerMemoryPropertyNumber).ConfigValue;
}
}
}

View File

@@ -0,0 +1,34 @@
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
#nullable disable
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
{
/// <summary>
/// A class for storing various properties needed for Saving & Scripting a server
/// </summary>
public class ServerInfo : SqlObject
{
public string? HardwareGeneration { get; set; }
public string Language { get; set; }
public int MemoryInMB { get; set; }
public string OperatingSystem { get; set; }
public string Platform { get; set; }
public int Processors { get; set; }
public bool IsClustered { get; set; }
public bool IsHadrEnabled { get; set; }
public bool IsPolyBaseInstalled { get; set; }
public bool? IsXTPSupported { get; set; }
public string Product { get; set; }
public int? ReservedStorageSizeMB { get; set; }
public string RootDirectory { get; set; }
public string ServerCollation { get; set; }
public string? ServiceTier { get; set; }
public int? StorageSpaceUsageInGB { get; set; }
public string Version { get; set; }
public int MaxServerMemory { get; set; }
public int MinServerMemory { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
using Microsoft.SqlServer.Management.Common;
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
{
public class ServerViewContext : SqlObjectViewContext
{
public ServerConnection Connection { get; }
public ServerViewContext(Contracts.InitializeViewRequestParams parameters, ServerConnection connection) : base(parameters)
{
this.Connection = connection;
}
public override void Dispose()
{
}
}
}

View File

@@ -0,0 +1,13 @@
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement.ObjectTypes.Server
{
public class ServerViewInfo : SqlObjectViewInfo
{
public ServerViewInfo() { }
}
}

View File

@@ -31,6 +31,8 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
[EnumMember(Value = "View")]
View,
[EnumMember(Value = "Database")]
Database
Database,
[EnumMember(Value = "Server")]
Server
}
}