Listing enterprise voice enabled users and their assigned numbers

I wanted a list containing all OCS users enabled for enterprise voice, and found the answer at UCSpotting. Being difficult, I also wanted to list the pone numbers assigned as Line URIs. I changed the query from UCSpotting and ended up with this:

SELECT r.UserAtHost, p.PhoneNum FROM RTC.dbo.ResourceDirectory c
INNER JOIN RTC.dbo.Resource r ON c.ResourceId = r.ResourceId
INNER JOIN rtc.dbo.ResourcePhone p ON c.ResourceId = p.ResourceId
WHERE (c.OptionFlags & 128) = 128
ORDER BY r.UserAtHost

which returns all enterprise voice enabled users who has an assigned Line URI. But then I thought, what about users with no Line URI? The list containing phone numbers were shorter than the list of voice enabled users, ergo there had to be some users enabled for voice without an assigned Line URI. Experiments showed that such a user could dial out, so listing these users as well seemed pertinent. Changing the last join to a left join instead did the trick:

SELECT r.UserAtHost, p.PhoneNum FROM RTC.dbo.ResourceDirectory c
INNER JOIN RTC.dbo.Resource r ON c.ResourceId = r.ResourceId
LEFT JOIN rtc.dbo.ResourcePhone p ON c.ResourceId = p.ResourceId
WHERE (c.OptionFlags & 128) = 128
ORDER BY p.PhoneNum

How to list all PSTN calls in OCS 2007R2

Problem

I needed a list of all calls leaving and entering the organisation via the Mediation servers IP trunk for invoice control. We suddenly detected a large increase in the volume of external calls through our OCS, and wanted to make sure the calls were actual calls and not misconfigured call redirection or something else. We had already deployed the monitoring role, but it was not logging any calls. This was due to an MSMQ error, which meant that the monitoring server could not receive any log messages. I fixed that and waited a couple of days for the data to accumulate. Then I had to find a report to give me the data I wanted. The default OCS reporting services reports allows me to list all the calls for a specific user, but I wanted to list all PSTN calls for all users.

Solution

First I tried to modify the included reports, but they were closely linked to several stored procedures, who again called other stored procedures and gave me far to much data anyhow. So I gave up that approach and started looking at the tables in the database. At http://technet.microsoft.com/en-us/library/dd819961(office.13).aspx I found a nice reference of all the QOE database tables. This enabled me to construct the following query:

USE [QoEMetrics]
GO

select us.URI as CallerURI, us2.URI as CalleeURI, StartTime, EndTime, 
datediff(Second, StartTime, EndTime) as DurSeconds ,
CONVERT(varchar(6), datediff(Second, StartTime, EndTime)/3600)
+ ':' + RIGHT('0' + CONVERT(varchar(2), (datediff(Second, StartTime, EndTime) % 3600) / 60), 2)
+ ':' + RIGHT('0' + CONVERT(varchar(2), datediff(Second, StartTime, EndTime) % 60), 2) as DurHMS, CallerEndpoint, CalleeEndpoint

from Session se
join [User] us on se.CallerURI = us.UserKey
join [User] us2 on se.CalleeURI = us2.UserKey
where (CalleeEndpoint = 1 or CalleeEndpoint = Null or CallerEndpoint = 1 or CallerEndpoint = Null) and StartTime Between '2011-03-08' and '2011-03-09'

The where statement is where the magic happens. You have to tailor this to your needs.

First it checks the endpoints, which identifies the caller and callee type. The endpoint ID’s are found in the Endpoint table. In my case, ID 1 translates to the mediation server. If you have more than one mediation server, you will have to add entries for all of them. A PSTN call will have the mediation server as an endpoint if the number is registered in Active Directory. Otherwise, the endpoint will be null. If the endpoint has a value other than null or the mediation server’s id, it refers to another computer running the OCS client. The endpoint table lists the computernames.

The second part of the where statement defines the timeframe from 00:00 on the first date to 00:00 on the second date. StartTime Between ‘2011-03-08’ and ‘2011-03-09’ will return all calls made between 2011.03.08 00:00:00 and 2011.03.09 00:00:00.

Running this query will list the calls made in the specified timeframe where one of the parties is on the PSTN. If you want to list outbound calls only, use this version:

USE [QoEMetrics]
GO

select us.URI as CallerURI, us2.URI as CalleeURI, StartTime, EndTime, 
datediff(Second, StartTime, EndTime) as DurSeconds ,
CONVERT(varchar(6), datediff(Second, StartTime, EndTime)/3600)
+ ':' + RIGHT('0' + CONVERT(varchar(2), (datediff(Second, StartTime, EndTime) % 3600) / 60), 2)
+ ':' + RIGHT('0' + CONVERT(varchar(2), datediff(Second, StartTime, EndTime) % 60), 2) as DurHMS, CallerEndpoint, CalleeEndpoint

from Session se
join [User] us on se.CallerURI = us.UserKey
join [User] us2 on se.CalleeURI = us2.UserKey
where (CalleeEndpoint = 1 or CalleeEndpoint = Null) and StartTime Between '2011-03-08' and '2011-03-11'

Klart det kan virtualiseres!

Det er svaret man får i 19 av 20 tilfeller om man spør noen som skal ha greie på virtualisering om en gitt tjeneste kan virtualiseres. Og de har stort sett rett. Problemet er at man stiller feil spørsmål. Isteden må man spørre seg: “Bør jeg virtualisere tjeneste x i mitt virtualiseringsmiljø? Og “Passer det med min virtualiseringsstrategi?”

Det er nemlig ikke gitt at forskjellige tjenester passer sammen i det samme virtuelle miljøet. Særlig ikke om man har satset og investert tungt i automatisk lastbalansering og høy oppetid.

Virtualisering er fremtiden, ingen tvil om det. Det gjør at man kan utnytte hardware mye mer effektivt en før, man kan spare store penger på strømutgifter og hardwarekostnader, og man kan oppfylle målsetninger om grønn IT og lavere karbonfotavtrykk. Det er ikke uvanlig å kjøre over 20 virtuelle servere på en fysisk vertsmaskin. Nå skal man riktignok ikke legge for mye i slike tall, for dersom man måtte kjøpe fysiske maskiner isteden hadde man sannsynligvis hatt færre servere med flere tjenester på hver server.

Man får også andre fordeler, som muligheten til å skifte ut hardware uten at serveren merker det, og muligheten til å flytte en virtuell server mellom flere vertsmaskiner mens den går slik at vedlikehold blir enklere. Det er rett og slett et stort fremskritt, noe som gjør at man lett sier at alt skal virtualiseres så langt det lar seg gjøre. Og det kan man stort sett oppnå, men det er ikke sikkert at det alltid er like lurt. Dersom man har et cluster med vertsmaksiner der gjennomsnittsserveren er tildelt 5GiB minne er det ikke sikkert at man bør legge inn servere som drar 50GiB i samme cluster.

Jeg skal ikke påstå å ha inngående kjennskap til virtualiseringsplattformer, men jeg har jobbet med optimalisering av Windows-servere siden NT 4, og en server med en gitt tjeneste trenger en viss mengde ressurser uansett om den er fysisk eller virtuell. Denne artikkelen handler mest om mine erfaringer med drift av forskjellige servertyper i virtuelle miljø. Se også artikkelen om Memory Overcommit der jeg skriver om problemer som kan oppstå om man ikke følger med på hvor mye minne som er i bruk på vertsmaskinene.

Continue reading “Klart det kan virtualiseres!”

Failed extract of third-party root list from auto update cab

Background

This is an annoying message that shows up in the Event Log on Windows servers and computers and won’t go away. The error was initially caused by a certificate update published by Microsoft at the end of 2010 containing expired root certificates. The error has continued to surface on systems though, so I am starting to wonder if it has more than one cause. One theory is that this happens when an administrator is logged or has an active but disconnected session on the computer while another administrator or some form of automation tries to install updates from Windows Update.

Symptoms and findings

The error is detected in the Application Event Log. On Windows server 2008 it looks like this:

SNAGHTML1083d214

Event 11 from Microsoft-Windows-CAPI2

Or like this:

SNAGHTML8f7d7b

Event 4017 from CAPI2

On Windows Server 2003:

SNAGHTML108e5b5f

Event 11 from crypt32

Solution

Microsoft has released a fixit that has solved this problem for me on most of the servers I have applied it to: Fix it 50531. See KB 2328240 for details and a manual method. This fixit only works on Windows 2008/7 though, but the manual method should work for older versions as well, provided you substitute “Documents and settings” were it says “Users” in the KB.

The solution is to delete the files in the folders referenced in the KB. You have to check all users and system accounts, unless you know which user ran windows update when the problem first appeared on your system.

Service account profile folder locations:

  • %windir%\ServiceProfiles\[Service Account]\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content
  • %windir%\ServiceProfiles\[Service Account]\AppData\LocalLow\Microsoft\CryptnetUrlCache\MetaData

User account profile folder locations:

    • C:\Users\[Account]\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content
    • C:\Users\[Account]\AppData\LocalLow\Microsoft\CryptnetUrlCache\MetaData

    SNAGHTML895cf0

    After deleting the files, check back a couple of hours and see if the error resurfaces. If you want to test it immediately, download the “authrootstl.cab” file from the link in the event and try to install it.

    Update: 20121018

    A colleague of mine has written a small powershell script that seems to do the trick on Win2008R2 servers:

    get-childitem -path 'c:\users' | where-object { $_.psiscontainer -eq $true } | foreach-object {
        $contentfolder  = join-path -path $_.fullname -childpath 'appdata\locallow\microsoft\cryptneturlcache\content\'
        $metadatafolder = join-path -path $_.fullname -childpath 'appdata\locallow\microsoft\cryptneturlcache\metadata'
        if (test-path -path $contentfolder ) { remove-item -path "$contentfolder\*"  -force -verbose }
        if (test-path -path $metadatafolder) { remove-item -path "$metadatafolder\*" -force -verbose }
        }
    

    This is quicker to implement than the “Fix it” or manual approach, and all our attempts have been successful so far.

    TS Tools, veien mot versjon 5

    Vi har nå startet arbeidet med en ny hovedversjon av TS Tools. TS Tools grunnprogrammet begynner å få en smule featureitis, så hovedfokus i versjon 5 er å fortsette å lage mer eller mindre frittstående moduler som samarbeider, istedenfor å legge stadig flere funksjoner inn i hovedprogrammet. Vi har også startet overgangen til .Net 4. Den første fullstendige V5 modulen er TS Tools AD som nå er i beta. TS Tools Roundup er ikke langt etter. Funksjonelt virker den, men integrasjonen og gui-overgangen er ikke fullført. Begge disse er nå lagt inn i den nye TS Tools Modules pakken som er en samlet installasjonspakke for tilleggsmoduler.

    En del av modulene, blant annet hovedmodulen finnes i dag kun i 64 bit. Det er en målsetning å tilby en 32 bit versjon der det er mulig og hensiktsmessig. Det finnes fortsatt mange 32 bits servere som er i drift, og disse trenger også TS Tools moduler.

    Hvilke moduler som får mest fokus styres som vanlig av hvilke jeg har mest bruk for i mitt daglige arbeid, noe som desverre betyr at brukerdokumentasjon og oppdatering av lite brukte moduler har lav prioritet.

    Med Windows 7 ble det vanskeligere å få applikasjoner som TS Tools til å fungere på en arbeidsstasjon pålogget som en vanlig bruker. Dette skyldes at det krever mye kode å få elevert seg til de nødvendige rettighetene, og det er vanskelig å få lagret innstillinger når programmet kjører som en annen bruker enn den som er pålogget. Dersom dette viser seg å bli for mye arbeid å få til å fungere, vil vi anbefale at programmet kjøres på enten på en virtuell maskin som er pålogget som administrator, eller direkte på en adminserver via rdp. TS Tools kan også kjøres via terminalserver, men kravene til rettigheter og ressurser gjør at den ikke bør kjøres på en produksjonsserver. Ressursbruken gjør at vi fraråder å kjøre TS Tools hovedmodulen og de tunge søkemodulene fra en produksjonsserver. Det er spesielt Eventlog søk som drar ressurser ved store datagrunnlag. Enkelte av søkemodulene som Roundup og Ninja er alget spesielt med tanke på å kjøre på en produksjonsserver. Av den grunn kjører de bare en enkelt arbeidstråd, men vi anbefaler ikke å kjøre disse uten at serveren overvåkes manuelt mtp cpu og minne.

    Virtual Server memory Oversubscription og Overcommit, en oppskrift på katastrofe?

    Etter å ha feilsøkt en del sære feil på virtuelle maskiner i et ESX miljø, bestemte jeg meg for å finne ut mer om hvordan minnehåndtering fungerer i virtuelle miljøer generelt og VMWare spesielt. Jeg har ikke så mye erfaring med oppsett av virtuelle miljøer for produksjon. For meg er det mest en plattform som en del av serverne jeg drifter kjører på, og som jeg må forholde meg til fra den siden. Etter å ha forsket litt på saken kom jeg frem til at en del av mine problemer nok skyldtes Memory Overcommit og det beslektede Memory Oversubscription. Memory Overcommit er et mye brukt uttrykk som virker å ha forskjellig betydning ut fra hvilken bakgrunn man har, derfor begynner jeg med å definere begrepene slik jeg ser dem.

    Continue reading “Virtual Server memory Oversubscription og Overcommit, en oppskrift på katastrofe?”

    How I finally upgraded the firmware on a Polycom CX700 running 1.0.522.73

    SNAGHTML244d5f8bA long and sad story about trouble upgrading the firmware in Office Communication Server enabled phones, specifically the Polycom CX700. This particular problem manifests itself as follows: The phone logs on to the server successfully and gets almost to the end of the login process. Then it crashes and automatically reboots. This goes on in an endless loop, and is caused by the phone running software not compatible with OCS 2007 R2. I post this hoping that it will be of help to others on a similar quest.

    The problem

    For about a year now, since we started our OCS pilot, I’ve had a Polycom CX700 on my desk. Actually, it has spent the bulk of that time on a shelf at my desk. It was purchased as a test device along with a collection of headsets and other OCS enabled devices. Most of them worked fine, but this one I just couldn’t seem to get working. After a lot of fiddling about I was able to log in successfully with a test user that had never ever logged on to any other device or computer. I happily thought I had it fixed, but as soon as I switched to another user it went back to the same old pattern: logon, crash and reboot in an endless loop.

    Continue reading “How I finally upgraded the firmware on a Polycom CX700 running 1.0.522.73”

    Cluster disker på passiv node og WWN på HBA

    Ved feilsøking av noen rare clusterproblemer begynte jeg plutselig å lure på hvordan clusterdisker var representert på den passive noden i et Windows 2008 cluster. De var nemlig ikke å se i Disk Management, og forsøk på failover av diskressurser feilet spektakulert og fullstendig. Litt forskning viste kjapt at joda, de skulle vært listet omtrent som dette:

    image

    Dermed måtte feilen være et annet sted. Litt mer fundering avslørte at vi hadde oppdatert bios og managementprosessor på dette clusteret for kort tid siden, og vi begynte å ane hvor grevlingen var. Av en eller annen grunn hadde ikke serveren fått satt riktig WWN ved omstart. Dette er et IBM HS22 blade med Qlogic HBA som får sine WWN fra managementmodulen, og en rask sjekk i SanSurfer avslørte at WWN ikke stemte overens med det som var definert i SANet. Dermed trengs en kaldstart av managementmodueln i bladet, noe som betyr å slå av serveren, trekke ut bladet, vente et minutt og sette det inn igjen. Deretter må man vente en 5 minutters tid mens IMM booter. Man kan se at den er ferdig ved at powerlyset i front av bladet begynner å blinke med betydelig langsommere takt. Først da vil bladet la seg slå på.

    Update: Det har også fungert i enkelte tilfeller å ta en full shutdown av bladet, vente to minutter og så starte det igjen. Det er verdt et forsøk, da man sparer en tur til serverrommet.

    Samme situasjon har jeg tidligere opplevd på HP BL460 blade. Disse har vanligvis Emulex-kort som liker å komme opp med blank WWN (00-00-00-…), eller med en WWN som begynner på 1 istedenfor 5. Dette er noe som er litt lettere å oppdage enn et nummer som er tilsynelatende riktig. Løsningen er den samme, ut med bladet for å få kaldstartet managementmodulen.

    SNAGHTML109f57a

    Dersom feilen oppstår på en helt ny server/nytt HostBusAdapter er det vanligvis firmware på HBA som er utdatert eller på annen måte ikke samsvarer med firmware til bladets managementmodul. Emulex liker å splitte denne i flere deler, en HBA bios og en HBA firmware, pass på at du oppdaterer alle. Og oppdater firmware på bladet samtidig. Det anbefales å bruke firmware fra bladeprodusenten og ikke fra Qlogic/Emulex. Pass også på at du oppdaterer firmwaren til den sentrale managementmodulen på IBM Bladecenter samtidig. Denne kalles AMM. På HP C7000 har man ofte Virtual Connect fibermoduler istedenfor fiberswitcher fra feks Brocade. Rent teknisk er det store forskjeller på AMM og Virtual Connect, men i denne sammenhengen er det viktigste at versjonene stemmer overens.

    Outlook 2010 i buffret modus mot Exchange 2003

    Problem

    Oppdatering av offline adress book og teamkalender tar lang tid eller skjer ikke dersom Outlook 2010 er satt opp til å bruke bufret modus mot en Exchange 2003 server med front-end og back-end.

    Problemet kan enklest reproduseres ved å booke en ressurs. Dersom man har satt opp direktebooking riktig, (se http://plo.lokna.net/?p=477), vil ressursens kalender bli oppdatert. Dog vil man ikke se det samme dersom man har ressursens kalender åpen i egen Outlook (teamkalender) før man restarter Outlook, bytter nettverkstilkobling eller restarter maskinen. Hva som skal til for å trigge en synk varierer.

    Jeg har ikke lykkes i å identifisere årsaken til dette, men problemet er reproduserbart hos min arbeidsgiver. Løsningen har jeg derimot funnet, så jeg har ikke søkt så lenge etter årsaken.

    Løsning 1 – Gi blaffen i bufret modus

     

    Dersom man bruker online modus fungerer alt uten problemer. Om man har en stasjonærmaskin tilknyttet direkte i samme nettverk som Exchange-serveren er det egentlig ikke nødvendig å bruke bufret modus. Man får dog litt tregere søk i innboksen, og dersom man har en stor postkasse kan dette påvirke ytelsen til systemet. Dette er dermed egentlig ikke å anbefale, men det fungerer.

    Løsning 2 – Sette opp proxy for bufret modus

    Aller først må man sjekke at bufret modus er på:

    SNAGHTML5c2a448

    Deretter må man sette opp frontend-server proxyinnstillingene som følger:

    image

    Altså:

    • Slå på SSL og sertifikatautentisering
    • Aktiver NTLM-godkjenning
    • Velg HTTP først uansett nettverkshastighet

    Problemer med reservasjon av ressurser mot Exchange 2003 via Outlook 2010

    Problem

    Dersom man har møterom eller andre ressurser i Exchange 2003 som er aktivert for direct booking hender det at Outlook 2010 ikke klarer å registrere reservasjoner, og de blir liggende i innboksen til ressursen som ubesvart/tentativ. Det hender at reservasjonen går igjennom etter noe tid, og det hender at det virker fint, men av og til så virker det bare ikke. Dette kommer av at Outlook 2010 ikke aktiverer støtte for DirectBooking som standard, men istedenfor sender forespørselen på mail til ressursen. Siden de fleste ressurskontoer er “hodeløse” og aldri blir åpnet av en klient er man avhengig av offlineprossesering på serveren. Continue reading “Problemer med reservasjon av ressurser mot Exchange 2003 via Outlook 2010”