Aug.03

Systeem- en softwaremonitoring met Visio 2007- 4 van 4 – De Software

In de vorige posts heb ik proberen uit te leggen op welke manier data kan worden gekoppeld aan Visio diagrammen. In deze laatste post over dit onderwerp wil ik uitleggen hoe een C# tool kan worden geschreven die geautomatiseerd de gekoppelde data van het Visiodiagram ververst en wegschrijft als webpagina.

De stappen

  1. Open Visual Studio en creeer een nieuw project.
  2. Klik met de rechtermuisknop in de Solution Explorer op References en kies Add Reference.
  3. Voeg een referentie toe naar Microsoft.Office.Interop.Visio en Microsoft.Office.Interop.Visio.SaveAsWeb.

    De Code
    De complete code ziet er alsvolgt uit:

    Wat doet de code
    Om te zorgen dat we een ‘onzichtbare’ versie van Visio draaien maken we gebruik van de InvisibleAppClass:

    InvisibleAppClass VisioApplication = new
    InvisibleAppClass();

    Helemaal onzichtbaar is Visio niet maar daar kom ik zo op terug.

    VisWebPageSettings VisioSaveAsWebSettings = (VisWebPageSettings)VisioSaveAsWebObject.WebPageSettings;

    VisioSaveAsWebSettings.QuietMode = int.MaxValue;

    VisioSaveAsWebSettings.SilentMode = int.MaxValue;

    VisioSaveAsWebSettings.TargetPath = @”c:tempvisiodiagram.html”;

    Met de VisWebPageSettings class kunnen we een export voor elkaar krijgen naar html pagina’s en gif images.

    Document VisioDocument = VisioApplication.Documents.Open(@”c:tempvisiodiagram.vsd”);

    Het openen van het betreffende VisioDiagram.

    //Refresh Data

    foreach (DataRecordset DataRecordset in VisioDocument.DataRecordsets)

    {

    DataRecordset.DataConnection.ConnectionString += string.Format(“;password={0}”, DataSourcePassword);

    DataRecordset.Refresh();

    }

    Met bovenstaande code worden alle gekoppelde recordsets doorgelopen in het diagram en wordt de data ververst. De constructie met het DataSourcePassword is bruikbaar in het geval dat er een wachtwoord noodzakelijk is in de connectionstring van de datasource. Deze wachtwoorden worden niet in het Visio diagram opgeslagen en zullen dus per connectiestring separaat moeten worden opgegeven. In dit geval ben ik er vanuit gegaan dat alle connectiestrings hetzelfde wachtwoord hebben.

    VisioSaveAsWebObject.AttachToVisioDoc(VisioDocument);

    //Save as webpages

    VisioSaveAsWebObject.CreatePages();

    Deze code zorgt daadwerkelijk voor het creeeren van de html pagina’s.

    VisioDocument.Save();

    VisioDocument.Close();

    De save methode wordt aangeroepen omdat, ondanks het feit dat we hier de InvisibleAppClass gebruiken, er wordt gevraagd of we het betreffende document op willen slaan als we direct de VisioDocument.Close() methode aanroepen.

    Samenvattend
    Met deze code kun je aan de slag om een geautomatiseerd proces te schrijven wat zorgdraagt voor het automatisch hergeneren van diagrammen met een bepaalde tijdsinterval naar html. Je kunt deze diagrammen tonen in een browser en automatisch laten verversen zodat je continue zicht hebt op de status van de systemen die gemonitord moeten worden. Overigens wil Internet Explorer 6 of 7 er dan na een uur of 12 de brui aan geven (oorzaak: Slecht memorymanagement). Je kunt natuurlijk ook een tool schrijven die de door Visio geexpoteerde gif images toont.

    Kanttekening
    Wat mij opviel is dat de namen van de klassen in de Visio libraries bijzonder slecht gekozen zijn. Een class met de naam Document of InvisibileAppClass getuigt niet echt van vindingrijkheid bij het Microsoft Visio Development team.

    Conclusie
    Dit is het laatste blog artikel in de serie. Met de aangedragen oplossing zou je op een simpele automatische manier je systemen moeten kunnen monitoren. Het is vooral leuke materie omdat er bijzondere visuele resultaten kunnen worden behaald. Succes!

Jul.30

Systeem- en softwaremonitoring met Visio 2007- 3 van 4 – De monitoring software

In de voorgaande post heb ik proberen uit te leggen hoe data kan worden gekoppeld aan Visio diagrammen. Om dat te kunnen doen is het natuurlijk van belang zinnige monitoringgegevens te hebben. In deze post wil ik uitleggen hoe je met behulp van ActiveXperts Networkmonitor (nee, ik heb geen aandelen) gegevens kunt verzamelen in een MS SQL-Server database en hoe je deze kunt gebruiken voor de Visiodiagrammen. Het is zoals ik in de eerste post in de reeks al aangaf ook mogelijk om zelf een tool te maken om meetgegevens op te slaan of een andere tool te gebruiken.

Ik ga er vanuit dat je ActiveXperts Networkmonitor is geinstalleerd en dat je een aantal checks (ping, cpu, disk space etc.. hebt geconfigureerd.

Open ActiveXperts Networkmonitor en zorg dat er via het “Tools”-menu > Options > Logging Tab een SQL Server database is ingesteld. Meer informatie daarover is hier te vinden. Zet vervolgens de logging aan en selecteer “Log all monitoring activities”. Dit betekent dat alle monitoring acties worden gelogd.


Omdat het aantal records dat wordt weggeschreven door het loggen van alle monitoring activiteiten flink kan oplopen is het aan te raden een job in te regelen die regelmatig de database schoont. De query zou er zo uit kunnen zien:

DELETE FROM Events WHERE TimeSecs <= (SELECT MAX(TimeSecs)-(60*60*2) FROM Events)

Om uiteindelijk tot meetgegevens te komen die binnen Visio gebruikt kunnen worden moet er een view binnen SQL Server worden aangemaakt. Deze ziet kan er zo uit zien:

SELECT
CurrentStatus.CheckID,
CurrentStatus.EventID,
Events_1.ID,
Events_1.TimeSecs,
Events_1.TimeString,
Events_1.CheckID AS Expr1,
Events_1.CheckName,
Events_1.CheckTypeID,
Events_1.ResultID,
Events_1.DataVal,
Events_1.Explanation,
dbo.Checks.ID AS Expr2,
dbo.Checks.Name,
CASE WHEN ISNUMERIC(Events_1.DataVal) =1 THEN CONVERT(FLOAT, Events_1.DataVal) ELSE 0 END AS DataValFloat
FROM (SELECT
CheckID,
MAX(ID) AS EventID
FROM dbo.Events WITH (NOLOCK)
GROUP BY CheckID) AS CurrentStatus
LEFT OUTER JOIN dbo.Events AS Events_1 WITH (NOLOCK) ON Events_1.ID = CurrentStatus.EventID
LEFT OUTER JOIN dbo.Checks WITH (NOLOCK) ON dbo.Checks.ID = CurrentStatus.CheckID

Bovenstaande query zorgt dat uit de logginggegevens de laatste status van elke check wordt opgehaald. Met deze resultaten kunnen Visiodiagrammen worden opgebouwd zoals beschreven in de vorige post. Er zit hier en daar wat conversies tussen die het makkelijk maken met de meetdata om te gaan. Probeer eens aan de hand van de voorgaande post gebruik te maken van deze data.

In de volgende post, de C# applicatie die data van Visiodiagrammen ververst en de diagrammen exporteert naar html (en .gif bestanden).

Jul.27

Systeem- en softwaremonitoring met Visio 2007 – 2 van 4

Dit is het vervolg op mijn vorige post over monitoren van systeem met behulp van Visio diagrams. In deze post zal ik uitleggen hoe data gekoppeld kan worden aan Visio shapes waardoor de visualisatie van de shape kan worden beinvloed.

Stap 1 – Data Downloaden
Download dit Excel bestand. Hierin bevinden zich voorbeeld meetgegevens. Aan de data worden niet veel bijzondere eisen gesteld behalve dat elke regel met een meetgegeven een unieke id bevat. De te downloaden meetgegevens bevatten per regel een Id, een meetwaarde, een status (0=OK, 1=Warning, 2=Error, 3=Niet meetbaar), een omschrijving en een timestamp

Stap 2 – Diagram aanmaken
Start Visio Professional 2007 en selecteer File > New > Network > Detailed Network Diagram (Metric). Je hebt nu een diagram met aan de linkerkant een keuze uit diverse networkshapes zoals servers etc…

Stap 3 – Excel data koppelen
We gaan nu de Excelsheet (het had ook SQL data kunnen zijn) koppelen aan het nieuwe diagram. Kies in het menu Data > Link Data To Shapes… Selecteer Microsoft Excel Workbook kies “Browse…” en selecteer het zojuist gedownloade excel sheet. Klik op “Next” en kies “Sheet1$”. Klik op 2x “Next” en vink “Id” aan als unique identifier kolom. Klik “Next” en dan “Finish”. Voila, data is gekoppeld aan het diagram.

Stap 4 – Fields gebruiken
Plaats nu linksboven de text “Systeemstatus” en zet de fontsize naar 20 en bold. Om er duidelijk te maken hoe recent de gegevens van het diagram zijn kunnen we datum naast deze kop plaatsen.

Zoals je misschien hebt gezien vind je onderin de Visio applicatie een lijst met records uit het Excel sheet. Mocht je die niet terug kunnen vinden selecteer dan in het View menu “External Data”.


Selecteer een van de records en sleep deze op de zojuist gecreeerde tekst. Je zult nu mogelijk naast de tekst een zogenaamd “Data Graphic” zien verschijnen


en aan de rechterkant zal onderstaand Data Graphic venster worden geopend. Zo niet kies dan in het Data menu “Display Data On Shapes”. Selecteer de tekst en klik in het Data Graphic-venster op “None”.


Nu gaan we de datum toevoegen. Zet de cursor achter de tekst “Systeemstatus “. Kies in het menu Insert > Field en dan als Category:Shape Data en Field Name: Timestamp.


We hebben nu fielddata gekoppeld.

Stap 5 – Shapes gebruiken
Selecteer nu uit de shapegroep bij “Netwerk and Pheripherals” de server shape. Sleep deze op het diagram. Sleep nu een het ping record van het Peregrijn system uit het external data venster op deze shape. We gaan nu een nieuw Data Graphic maken.

Klik linksboven op “New Data Graphic”


Klik in het nieuw geopende venster op New Item > Color By Value


Selecteer als Data Field “Status”. Op basis van de waardes van dit veld kan een kleur worden gegeven aan deze shape. Voeg 3 kleuren toe zoals in onderstaande screenshot te zien is.

Klik op OK en nogmaals in het andere venster op OK.

Klik daarna op “Yes” om aan te geven dat deze nieuwe Data Graphic moet worden toegepast op de geselecteerde shape.


Teken nu een rechthoek onder de zojuiste geplaatste shape.

Dubbelklik er op en vul de tekst “CPU” in.

Sleep het CPU Usage record van Peregrijn op deze rechthoek. De rechthoek zal nu automatisch dezelfde data graphic toegekend krijgen als de server shape.

Maak een kopie van de data graphic door op de datagraphic aan de rechterkant het menu open te klikken en “Duplicate” te selecteren.

Klik op de gedupliceerde data graphic om deze toe te kennen aan de rechthoek.

Klik in het menu (het pijltje aan de rechterkant) van de gedupliceerde data graphic op “Edit Data Graphic…”. Klik op New Item > Data Bar.

Selecteer als “Data Field”: “Value”.

Selecteer als “Callout”: “Speedometer”.

Zet “Label Position” en “Value Position” op “Not Shown”. Klik op OK.


Dubbelklik op de tekst van de rechthoek en zet de cursor achter “CPU “.

Kies in het menu Insert > Field en dan Category Shape Data en Field Name “Value”.

Druk op OK en voeg een procent teken toe.

We zijn klaar. Onderstaand het resultaat.


Niets houd je nu meer tegen om een fantastisch diagram in elkaar te knutselen. Je kunt elke willekeurige shape en tekst gebruiken om bovengenoemde acties op toe te passen.

Volgende post zal ik uitleggen hoe ActiveXperts Networkmonitor kan worden ingeregeld om de meetdata toegankelijk te maken voor een Visiodiagram als dit.

Jul.23

Systeem- en softwaremonitoring met Visio 2007- 1 van 4

De utopie van elke systeembeheerder, een videowall met een overzicht van alle systemen. Uitgebreide informatie over de status van deze systemen bijv pingtijden, schijfruimte, bandbreedte, systemperformance, geheugengebruik etc… Kortom, in zijn wildste droom zou het eerste diagrammetje er zo uit kunnen zien:Systeem monitoring Visio diagram.

Dat ziet er leuk uit, toch? Bovendien is dit ontzettend functioneel, in een oogopslag is te zien hoe het er met de systemen en verbindingen voorstaat. Leuke bijkomstigheid is dat je er nog indruk mee kunt maken ook! Ingewikkeld? Tja, het is wel wat werk maar nee, je moet alleen weten hoe je dit voor elkaar kunt krijgen en dat ga ik proberen uit te leggen in deze en de komende 3 posts. Voor ik deze oplossing vond ben ik minstens een jaar op zoek geweest en die tijd kan jij nu besparen!

Wat heb je nodig?

  • Microsoft Visio Professional 2007
  • Database met monitoringgegevens.
  • Kleine C# applicatie voor het bijwerken van de diagrammen naar de meest recente monitorgegevens.

Microsoft Visio Professional
Met behulp van Visio Professional 2007 kunnen de benodigde diagrammen worden gemaakt. De ‘Professional’ variant van deze software bevat de mogelijkheid data te koppelen aan shapes en data.

Database met monitoringgegevens
Deze database bevat data met monitoringgegevens die worden verzameld door een daarvoor geschikte tool. Een voorbeeld van een goede monitoringtool is ActiveXperts Networkmonitor. Deze heeft de mogelijkheid meetgegevens zoals pingtijden, schijfruimte, systemperformance, bandwidthusage weg te schrijven naar een SQL Server of MS Access Database. Je kunt natuurlijk ook zelf een applicatiemaken die dit soort gegevens verzamelt en in een database wegschrijft.

Kleine C# applicatie
Een kleine C# applicatie die zorgdraagt voor het verversen van de monitoringdata in de Visiodiagrammen en de export naar html.

  • In de volgende post zal ik uitleggen hoe de koppeling van data aan Visio shapes gedaan kan worden.
  • In de 3e post zal ik uitleggen hoe met ActiveXperts Networkmonitor data kan worden gekoppeld aan Visiodiagrammen.
  • In de 4e post zal ik uitleggen hoe het verversen van de Visiodiagrammen op basis van de meest recente verzamelde data kan worden uitgevoerd.

Jun.29

Text-To-Speech en Speech Recognition met .NET

Microsoft Speech API 5.1Sinds .NET framework 3.0 is er de system.speech.dll beschikbaar. Hiermee is het mogelijk tekst naar spraak of spraak naar tekst (speech recognition) te vertalen. Hoe werkt het?

  • Maak een reference naar de system.speech.dll
  • Voer de volgende code uit:
  • Hartstikke simpel en leuk om eens mee te experimenteren. Download de Microsoft Speech API SDK

    May.29

    Lang geleden: Visio naar XAML

    Het is treurig gesteld met mijn blog updates. Zo treurig dat ik het wachtwoord om een post te schrijven niet meer wist. Eigenlijk nog treuriger dan het feit dat ik als .NET blogger gebruik maak van een PHP gedreven blog. Maar ja, ik heb in de tijd dat ik niet blogde wel veel interessants gedaan waar ik weer veel over kan bloggen. Maar, geen beloften, want ik ga nog veel meer boeiende tijdrovende zaken doen die kunnen maken dat ik geen tijd heb om te bloggen.

    Maar goed, de rede dat ik dit schrijf, ik kwam iets leuks tegen. Visio diagrams omzetten naar XAML (WPF). Je leest er hier meer over.

    Binnenkort hoop ik verder in te gaan op het gebruik van Visio om systemen en software te monitoren.

    Oct.30

    Gratis CodeRush Xpress for C#

    Developer Express en Microsoft hebben een versie beschikbaar gesteld van een combinatie van de 2 software pakketten CodeRush en Refactor!Pro. Deze draagt de naam CodeRush Xpress. Download en meer over de beschikbare features is te vinden op deze website. Dit pakket integreert in Visual Studio 2008 en voegt handige editing features en krachtige refactoring features toe.

    Jul.04

    Een hartelijk welkom bij de Postbank

    Tja, er zal maar iets mis gaan in je programmatuur. Zo probeerde ik deze week in te loggen op mijn online rekening bij de Postbank.
    Dat de software dan wat onbeschoft en dement wordt is wat jammer 😉

    De normale vs onbeleefde benadering
    Postbank.jpg

    Jul.04

    Reporting Services de weg kwijt

    Een paar weken geleden liep ik tegen het volgende probleem aan. Bij het opstarten van mijn Reporting Services web interface kreeg ik de volgende foutmelding:

    SSRS.jpgIIS draaide als een zonnetje. Herstarten van IIS of SQL Server hielp geen zier. De RS configuration manager melde geen vreemde dingen. Het heractiveren van RS webfunctionaliteit hielp ook niets. Ga er maar aan staan. Er zijn Fora die deze issue melden, oplossing SQL Server verwijderen en opnieuw installeren. Hmmmm, dat is wel erg veel werk.

    Uiteindelijk heb ik de inhoud van de Reporting Services webdirectory vergeleken met een andere server, en wat bleek. De directories C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportServer kwamen niet overeen. Er waren 5 files verdwenen:

  • Catalog.sql
  • CatalogTempDB.sql
  • Global.asax!!!!
  • ModelGenerationRules.smgl
  • ReportExecution2005.asmx
  • Gotcha! Alle bestanden gekopieerd vanuit de goed functionerende server en draaien maar weer.

    Tja, hoe is dat mogelijk?? Dat het probleem vaker voorkomt lijdt geen twijfel.

    May.24

    Nabeschouwing Developer Days 2008

    Even terzijde… Het is weer even geleden sinds m’n laatste artikeltje. Privé omstandigheden maakte echter dat van bloggen de laatste tijd niet veel is gekomen. Ik hoop de komende tijd weer wat frequenter te bloggen.

    DevDays.jpg
    Tja, de Developer Days, er waren wat plus en minpunten. De keynote van David Platt was meer dan de moeite waard. Met een goed en humoristisch verhaal over hoe en waarom we software maken en “Why software sucks” was een leuke binnenkomer. Het serieuze ICT wereldje kan naar mijn idee af en toe wel eens wat meer humor gebruiken. Dit deed overigens geen afbreuk aan het punt dat hij maakte. Het boek “Why software sucks” heb ik dan ook maar direct aangeschaft, goed voor inspiratie en hopelijk… goed voor de gebruikers van mijn software.

    BufferOverflow.jpgDe tweede sessie die ik bezocht vond ik eerlijk gezegd wat minder interessant. Met de essentie van “19 deadly sins of software security” was in principe niets mis, maar het grootste deel van de presentatie ging over C/C++ buffer overflows, het bleef onduidelijk in hoeverre het .NET framework last zou kunnen hebben van dit fenomeen. Met de presentatie was overigens niets mis en het laatste deel over SQL injection en Cross Site Scripting sprak zeker aan. Punt blijft dat je op de Developer Days komt voor nieuwe technologieën en ontwikkelingen en deze presentatie wat dat betreft een beetje uit de toon viel omdat er weinig is gezegd over security in de huidige .NET omgeving. Nu kan ik me voorstellen dat Microsoft niet heel blij zou zijn als iemand zou vertellen hoe binnen .NET software een buffer overflow kan worden veroorzaakt ;-). BTW: Ze bestaan, alleen jammer dat die niet werden aangetipt en verteld hoe te voorkomen.

    De pauze, tja, een beetje rondkijken bij de diverse stands. Hier en daar een leuk spelendingetje scoren om de kids ’s avonds mee blij te maken en natuurlijk de lunch. Wat me dit jaar opviel en als ik even naga ook de voorgaande jaren is dat er weinig plaats is om te zitten of je eten neer te zetten. Wat je dan ook zag bij “Park Foyer” is dat elk plekje op 1 meter hoogte van de grond werd benut om glaasje drinken of tas neer te zetten. En die plaatsen waren er niet zoveel. Echt waar, het is heel vervelend als je met in je ene hand een tasje met gadgets, een laptop aan je schouder en een bordje met een beker drinken er op in je andere handen staat te bedenken hoe je dit nu weer gaat regelen (en dan maar hopen dat je telefoon niet gaat 😎 ). Kortom een paar statafels moet toch een kleine moeite zijn in 2009.

    Silverlight.jpgNa de pauze bezocht in de presentatie van Peter Himschoot die tijdens de sessie een Silverlight 2.0 bierbrowser applicatie in elkaar knutselde. Interessant, want Silverlight lijkt nu echt volwassen te worden. Er zijn intussen een keur aan controls voor Silverlight beschikbaar. Ten opzicht van versie 1.0 een hele verbetering waarin enkel maar een paar basiscontrols gebruikt konden worden. Vooral de DataGrid is een interessante en handige control. Overigens is Silverlight 2.0 nog in beta stadium maar wordt uitgegeven met een Go-Live licentie. Er is een setup beschikbaar waarbij Visual Studio 2008 kan worden gebruikt om Silverlight 2.0 applicaties te bouwen. Verder is het aan te raden Blend 2.5 March Preview te downloaden aangezien de Visual Designer in VS 2008 nog niet zo heel best werkt (mijn VS crashte meerdere keren op de designer) of je bent natuurlijk een echt XAML guru. Peter durfde het overigens ook niet aan met de Visual Studio Designer en schakelde deze direct aan het begin van zijn presentatie uit. Al met al interessant voer om op de late avond eens mee aan het vogelen te gaan. Meer info…

    Om de dag in stijl af te sluiten heb ik als laatste de WPF sessie bezocht van David Platt. Voortbordurend op de keynote liet hij voorbeelden zien van hoe WPF wel en niet gebruikt zou moeten worden. Verhelderend en leerzaam. We moeten voor ogen houden dat developers van een ander soort zijn dan gebruikers van onze software. Volgens Platt: “Op deze Developer Days waren slechts 80 vrouwelijke developers aanwezig terwijl in het dagelijks leven +/- 52% vrouwelijke software gebruikers zijn.” Goed punt toch!?

    Kortom een geslaagde dag, het geeft mij toch elk jaar weer stof tot nadenken en een stimulans om het volgende jaar maar eens 2 dagen te gaan. Ik ben benieuwd of de baas dat goed vindt…

    P.S. Ben je er niet geweest of heb je een sessie gezien die je niet had willen missen? Microsoft plaats alle sessies na verloop van tijd op internet. Als het zover is lees je het hier.