Destaque de utilitárioSMSMap

Jeff Tondt

Faça download do código deste artigo: UtilitySpotlight2007_07.exe (2477KB)

Uma imagem vale mais do que mil palavras. Esse provérbio comum refere-se à idéia de que histórias complexas podem ser contadas com apenas uma única imagem, ou que uma imagem pode influenciar mais do que uma grande quantidade de texto. O provérbio também caracteriza com habilidade os objetivos da visualização, em que grandes quantidades de dados devem ser absorvidas rapidamente.

Para um maluco por System Management Server (SMS) como eu, ver toda a hierarquia SMS em uma só imagem me ajuda a compreender como minha infra-estrutura está disposta. Você poderia usar uma imagem como essa, talvez, para mostrar o antes e o depois de um plano de migração SMS para gerenciamento. Em certos casos de solução de problemas, um diagrama como esse poderia ser muito útil para encontrar uma solução ou pelo menos para obter a ajuda de outras pessoas. E, é claro, como um administrador SMS responsável, você precisa documentar sua hierarquia de sistema por muitos outros tipos de motivos.

Criando a imagem

Não é que você não possa desenhar você mesmo o diagrama. Sem dúvida você pode arregaçar as mangas, desenhar manualmente a hierarquia SMS e documentar as configurações do local à mão. Se você tem o Microsoft® Operations Manager (MOM) para monitorar seus servidores SMS, pode fazer com que ele diagrame sua hierarquia — apesar de eu ter que fazer a ressalva de que o MOM não é dos mais habilidosos com imagens e, certamente, não documenta as configurações do seu local. Pode haver outros métodos ou ferramentas úteis, mas ainda não encontrei nada que criasse adequadamente imagens bonitas e ajudasse a documentar as configurações do local — pelo menos não para minha satisfação.

Então eu decidi criar o meu próprio software. Assim nasceu o SMSMap 1.0. O SMSMap é um aplicativo em Visual Basic® .NET que usa as bibliotecas gerenciadas SMS no SDK do SMS e automatiza o Microsoft Visio® via COM. O utilitário consulta um servidor de site SMS alvo e, com isso, cria um diagrama visualmente atraente no Visio e exporta as configurações do site para um arquivo XML. O XML foi escolhido por ser a forma mais compatível de documentar as configurações do site. Escolhi mostrar também as funções SMS, não só os servidores físicos relacionados a outros servidores SMS. Isso permite reformular o diagrama por meio das camadas do Visio para observar a hierarquia SMS de vários pontos de vista.

Figura 1 Formato radial

Figura 1** Formato radial **

Atualmente, o programa possibilita que você selecione seis formatos diferentes para o diagrama Visio. Por exemplo, a Figura 1 mostra uma hierarquia SMS muito simples usando o formato radial, enquanto a Figura 2 mostra a mesma hierarquia usando o formato de fluxograma. O utilitário funciona bem com hierarquias muito maiores, mas eu não gostaria de criar dificuldade aqui.

Figura 2 Formato de fluxograma

Figura 2** Formato de fluxograma **

Em algum momento, o SMSMap provavelmente irá evoluir para documentar todas as configurações do site. Atualmente, ele documenta apenas as funções do site SMS e todos os limites. Com um pouco de esforço, muitas outras configurações de site podem ser exportadas para o arquivo XML.

Usando o SMSMap

Os arquivos de instalação e código-fonte do SMSMap estão disponíveis no site da TechNet Magazine. Para instalá-lo, basta executar o SMSMapSetup.msi, que o orientará durante a instalação. Lembre-se de que o SMSMap usa o Visio, então você precisa também já tê-lo instalado. Após a instalação, execute C:\Arquivos de Programas\Microsoft\smsmap\smsmap.exe (a menos que você o tenha instalado em um local diferente do padrão).

Você pode executar o SMSMap em qualquer máquina, pois não precisa executá-lo no servidor do site (e é improvável que muitos servidores de site SMS tenham o Visio instalado). Insira o nome de servidor de site SMS em que você deseja que a consulta seja originada. Pode ser o site central, se você deseja consultar toda a hierarquia, ou pode ser qualquer servidor de site primário filho, mas nesse caso você obterá apenas a hierarquia a partir desse site primário filho e inferiores. Em seguida, digite a conta que tem permissão para consultar o SMS usando o formato domínio\nomedeusuário e a senha dessa conta. (A senha não será exibida, você pode executar o aplicativo na frente de outras pessoas.)

Seis botões de opção possibilitam que você selecione o layout, e é possível escolher se deseja permitir ou impedir que as funções SMS apareçam no desenho. Essas caixas de seleção estão localizadas na guia Options (Opções). Pressionar o botão Draw (Desenhar) dá início ao utilitário. Em primeiro lugar, ele verifica se o Visio está disponível, depois consulta o servidor do site primário SMS especificado e adiciona os objetos ao diagrama Visio. O diagrama do Visio pode parecer feio enquanto o SMSMap está agrupando os objetos, mas no final o utilitário os organiza no formato especificado no início.

Mergulhando mais fundo

Agora você viu por que e como documentar sua hierarquia SMS usando o SMSMap. Para aqueles que desejam flexionar seus músculos de desenvolvedor, vamos olhar mais em detalhes como o utilitário funciona.

O SMSMap utiliza interfaces do servidor de site SMS gerenciado para reunir as informações de SMS e os conjuntos de módulos de interoperabilidade primária do Visio para gerar um diagrama no Visio que disponha os dados em todas as formas necessárias. O SMS 2003 SDK versão 3.1 contém o lançamento mais recente das interfaces de servidor de site SMS gerenciado. Esse conjunto de interfaces gerenciadas possibilita que você conecte e configure um servidor de site SMS por meio de qualquer aplicativo ou linguagem habilitada para Microsoft .NET Framework.

Essas interfaces usam o namespace System.Management para interagir com um provedor SMS por meio de WMI (Instrumentação de Gerenciamento do Windows®). Para usar as interfaces, você deve desenvolver seu aplicativo com uma linguagem compatível com .NET (por exemplo, C#, Visual Basic .NET e assim por diante) e consultar o Microsoft.SystemsManagementServer.Automation.dll que o assembly .NET forneceu com o SDK do SMS.

As classes de gerenciamento do .NET resolvem muitas das idiossincrasias do modelo de objeto WMI para apresentar um modelo consistente e orientado a objetos. As tarefas básicas de conexão WMI, enumeração de objetos, execução de métodos, exclusão e recuperação de objetos e captura de eventos podem todas ser realizadas pelas classes de gerenciamento .NET.

Conjuntos de módulos de interoperabilidade primária do Visio

Um conjunto de módulos (assembly) de interoperabilidade primária possibilita que você use código gerenciado para controlar aplicativos COM como o Visio por meio de programação. Os conjuntos de módulos de interoperabilidade primária do Visio permitem que você integre e amplie a funcionalidade do Visio em aplicativos gerenciados.

Se você já tem o .NET Framework instalado no seu computador, quando instalar posteriormente o Visio, o instalador adicionará os conjuntos de módulos de interoperabilidade primária do Visio ao GAC (Global Assembly Cache) no seu computador. Você pode adicionar uma referência aos conjuntos de módulos de interoperabilidade primária do Visio a partir de seus aplicativos gerenciados.

Depois de adicionar uma referência ao projeto, você poderá começar a trabalhar com objetos Visio a partir de seus aplicativos gerenciados. O Visio tem um modelo de objeto abrangente, que oferece um conjunto de classes, interfaces e enumerações para que você possa criar diagramas por meio de programação.

Fluxo do programa

Agora que descrevi as principais interfaces de componente do Visio e do SMS, passarei para a explicação sobre o fluxo do utilitário em si.

O primeiro passo ao usar as interfaces gerenciadas é estabelecer conexão com o provedor SMS. Isso pode ser feito por meio da criação de uma nova instância da classe SMSProvider. Internamente, essa classe irá encontrar o provedor SMS para o servidor do site especificado e conectar-se a ele com um dado conjunto de credenciais. Se o provedor estiver na máquina local, as credenciais atualmente conectadas serão usadas em vez das credenciais fornecidas quando se conectar ao provedor. Apesar de você poder executar o SMSMap no servidor SMS, recomendo executá-lo em uma estação de trabalho separada, que tenha o Visio instalado. A maioria dos servidores de site SMS não possui o Visio instalado por motivos óbvios.

Quando você acessa os dados no site SMS por meio da classe SMSProvider, os direitos de segurança são tratados como se você estivesse usando o SMS Administrators Console. Isso significa, por exemplo, que se você tentar definir as configurações de um servidor de site por meio de um SMSProvider, a conta com que você se conecta ao provedor deverá ter o mesmo conjunto de direitos que se você estivesse usando o console do administrador.

A classe SMSProvider fornece um método GetSiteSettings que lhe permite entrar nas configurações do site atual (ao qual o provedor pertence) ou de qualquer outro site com um código de site específico. O trecho de código na Figura 3 mostra como o SMSMap conecta-se ao provedor do servidor de site alvo. Espera-se que as credenciais do usuário sejam passadas no formato Domínio\Usuário. Você pode também especificar "." para indicar a máquina atual. A Figura 3 também inclui código que ajuda a exibir os resultados na interface de usuário e para registro em log.

Figure 3 Trecho de GetSiteSettings

Imports System.Management
Imports Microsoft.SystemsManagementServer.Automation

 oProvider = New SMSProvider(txtServer.Text, txtUser.Text, txtPassword.Text)
 oSite = oProvider.GetSiteSettings()
 Trace.WriteLine(“Connected to “ & txtServer.Text & “: “ & My.Computer.Clock.LocalTime)
 ListBox1.Items.Add(“Connected to “ & txtServer.Text & “: “ & My.Computer.Clock.LocalTime)
 Application.DoEvents()
...

O próximo passo é definir o arquivo XML para reunir e gravar as informações SMS do servidor de site alvo, conforme mostrado na Figura 4.

Figure 4 Criando o arquivo XML

‘ First, Create the XML File 
 oWriter = New XmlTextWriter(m_sXmlFile, System.Text.Encoding.UTF8)
 oWriter.WriteStartDocument()
 oWriter.WriteStartElement(“Hierarchy”)

 ‘ Export Target Site to XML
 oWriter.WriteStartElement(“Site”)
 oWriter.WriteAttributeString(“Code”, oSite.SiteCode.ToString.ToUpper)
 oWriter.WriteStartElement(“SiteServer”)
 oWriter.WriteAttributeString(“Name”, oSite.SiteServer.ToString.ToUpper)
 oWriter.WriteEndElement()
 oWriter.WriteStartElement(“ParentSiteCode”)
 oWriter.WriteAttributeString(“SiteCode”, “THIS_IS_THE_TOP”)
 oWriter.WriteEndElement()

...

Em seguida, o site alvo precisa ser desenhado no diagrama do Visio e atualizado na interface e no registro em log, como você pode ver na Figura 5.

Figure 5 Desenhando o site no Visio

 ‘Draw Central Site
 dblXLocation = 4.25
 dblYLocation = 8.5
 vApp = New Visio.Application()
 vDoc = vApp.Documents.Add(“”)
 vStencil = vApp.Documents.OpenEx(TEMPLATEPATH, 4)
 ‘ Add Layers
 vExistingLayers = CType(vDoc.Pages(1).Layers, Visio.Layers)
 vLayer = CType(vExistingLayers.Add(“Site”), Microsoft.Office.Interop.Visio.Layer)

...

 If oSite.SiteType = SiteTypes.PrimarySite Then
 vFlowChartMaster = vStencil.Masters(“Primary Site”)
 ElseIf oSite.SiteType = SiteTypes.SecondarySite Then
 vFlowChartMaster = vStencil.Masters(“Secondary Site”)
 End If
 vToShape = vApp.ActivePage.Drop(vFlowChartMaster, dblXLocation, dblYLocation)
 vLayer.Add(vToShape, preserveMembers)

...

Para abranger toda a hierarquia contida no site alvo, é executado o mesmo código básico descrito acima, que consulta o SMS e desenha no Visio. Essa é uma função denominada Level, que é chamada recursivamente para garantir que todos os sites filhos sejam consultados, independentemente do tamanho da hierarquia. O Level reúne as informações do site SMS e as registra em XML, na interface do usuário e no log de cada site filho dentro do site alvo. Por fim, a Figura 6 mostra como o diagrama do Visio é formatado com o formato selecionado quando o utilitário é iniciado. Em seguida, os arquivos XML e de log são fechados.

Figure 6 Terminando

 vDoc.Pages(1).Layout()
 vDoc.Pages(1).ResizeToFitContents()

 ‘Calculate the page width and height with a 5% boundary 
 visCell = vDoc.Pages(1).PageSheet.Cells(“PageHeight”)
 dHeight = visCell.Result(“in”)
 visCell = vDoc.Pages(1).PageSheet.Cells(“PageWidth”)
 dWidth = visCell.Result(“in”)
 dHeight = dHeight + 1
 dWidth = dWidth + 1
 vDoc.Pages(1).PageSheet.Cells(“PageHeight”).Result(“in”) = dHeight
 vDoc.Pages(1).PageSheet.Cells(“PageWidth”).Result(“in”) = dWidth
 vDoc.Pages(1).CenterDrawing()
 Trace.WriteLine(“Arranged Sites “ & oSite.SiteServer & “: “ & My.Computer.Clock.LocalTime)
 ListBox1.Items.Add(“Arranged Sites “ & oSite.SiteServer & “: “ & My.Computer.Clock.LocalTime)
 vFlowChartMaster = vStencil.Masters(“Background world”)
 vApp.ActivePage.Drop(vFlowChartMaster, 0, 0)

 ‘Finish up
 vDoc.SaveAs(SAVENEWFILE)
 vDoc.Close()
 vApp.Quit()
 vDoc = Nothing
 vApp = Nothing
 GC.Collect()

...

Somente o começo

É claro que isso é só o começo e há muitas possibilidades para melhorias. Os pontos de gerenciamento de dispositivos precisam ser investigados, pois não os vejo no SDK. Várias outras configurações de site poderiam ser adicionadas para documentar um site por completo. Talvez precise haver mais trabalho em relação à adição de uma variedade mais ampla de configurações de layout no Visio para ajudar a melhorar o aspecto de hierarquias pequenas e grandes. Cada tipo de layout possui suas próprias dificuldades quando se tenta criar modos de exibição eficientes. E, é claro, acrescentar suporte para o System Center Configuration Manager 2007 é uma próxima etapa muito importante. Mas mesmo essa primeira versão do SMSMap pode ajudar os administradores do SMS a exigir uma imagem geral e tentar alguns cenários de tentativa com as camadas e transparências do Visio.

Se você baixar o código-fonte, poderá ampliar o utilitário para atender às suas próprias necessidades. Testei o SMSMap no Windows XP SP2 com Visio 2003 e no Windows Vista™ Enterprise com Visio 2007. Se você tem sugestões sobre como melhorar esse utilitário, envie um email para mim no endereço jeff.tondt@microsoft.com.

Jeff Tondt é consultor sênior II da Microsoft Consulting Services. Ele está focado nas áreas de gerenciamento de sistemas, automação e gerenciamento de patches. Jeff é um especialista na área de SMS e para entrar em contato, use o endereço jeff.tondt@microsoft.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..