I am working on a client dashboard that will show technicicans all the info that they require after patching a system.
I am missing two steps, hoping you can help me with.
I would like to list all fixlets (and when they were applied) in the last day
I would like to see all errors since the last patch from system event log
My dashboard is showing information that is not relevant, and it doesn’t seem to update once the BESClient service is restarted. I have to click on Refresh link, and then it updates. I have included the document (feel free to all to use it)
I don’t know why my attachment isn’t uploading, but here is the file in text form __dashboard.html
BigFix Dashboard Example
<?relevance computer name ?>
Last Dashboard Update: : <?relevance modification time of file "__results" of folder "__BESData\__Global" of parent folder of regapp "BESClient.exe" ?>
Current Time : : <?relevance now ?>
Refresh (peut prendre jusqu’a un minute)
Computer Information
Nom du Serveur :
<?relevance (dns name) ?>
Role du Serveur :
<?relevance ((value "srvcomment" of KEY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\" of registry) as string) ?>
OS:
<?relevance concatenation of (name of operating system),(language of version block of file "kernel32.dll" of system folder & (if (exists key "HKLM\System\CurrentControlSet\Control\Nls\MUILanguages" of registry AND exists value of key "HKLM\System\CurrentControlSet\Control\Nls\MUILanguages" of registry) then " | MUI Installed" else "")),(if exist folder ("C:\program files (x86)") then "64-bit" else "32-bit") ?>
Type de Machine:
<?relevance string value of selects "Manufacturer from Win32_ComputerSystem" of wmi ?>
Redemarrer:
<?relevance concatenation of ((if it = 1 then it as string & " day" else it as string & " days") of ((uptime of operating system) / day)),(boot time of operating system) ?>
Dernier Logon:
<?relevance concatenation of (if exists current user then (name of current user) else (name of folder whose (modification time of file "ntuser.dat" of it = maximum of (modification times of files "ntuser.dat" of folders of folder (substring before "\All Users\Bureau" of (value "common desktop" of key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" of registry as string)) ) ) of folder (substring before "\All Users\Bureau" of (value "common desktop" of key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" of registry as string)))),(if exists current user then (now) else (maximum of (modification times of files "ntuser.dat" of folders of folder (substring before "\All Users\Bureau" of (value "common desktop" of key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" of registry as string))))) ?>
Essential Verification
Services Automatique Arreter :
<?relevance trs of tds of (display name of it & " - " & state of it) of services whose (start type of it = "auto" and state of it != "Running") ?>
_____________________________________
% Espace Disque:
<?relevance trs of tds of (name of it & " - " & (free space of it * 100 / total space of it) as string & " percent free") of drives whose (type of it = "DRIVE_FIXED") ?>
_____________________________________
Dernier connexion au serveur BigFix:
<?relevance modification time of file "__results" of folder "__BESData\__Global" of parent folder of regapp "BESClient.exe" ?>
_____________________________________
Software Versions
Netbackup Client: :
<?relevance if (not x64 of operating system) then (if exists file "C:\Program Files\VERITAS\NetBackup\bin\netbackup.dll" then version of file ("C:\Program Files\VERITAS\NetBackup\bin\netbackup.dll") as string else "NetBackup Client Not Installed") else if (x64 of operating system) then (if exists file "C:\Program Files (x86)\VERITAS\NetBackup\bin\netbackup.dll" then version of file ("C:\Program Files (x86)\VERITAS\NetBackup\bin\netbackup.dll") as string else "NetBackup Client Not Installed") else "N/A" ?>
Adobe8:
<?relevance if exists file ("C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe") then (values "ProductVersion" of version blocks of files ("C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe")) ELSE "Not Installed" ?>
Adobe9:
<?relevance if exists file ("C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe") then (values "ProductVersion" of version blocks of files ("C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe")) ELSE "Not Installed" ?>
WinZip:
<?relevance if (not x64 of operating system) then (if exists file "C:\Program Files (x86)\WinZip\WinZip32.exe" then version of file ("C:\Program Files (x86)\WinZip\WinZip32.exe") as string else "Not Installed") else if (x64 of operating system) then (if exists file "C:\Program Files (x86)\WinZip\WinZip32.exe" then version of file ("C:\Program Files (x86)\WinZip\WinZip32.exe") as string else "Not Installed") else "N/A" ?>
Office:
<?relevance if exists file ("C:\Program Files\Microsoft Office\OFFICE11\NPOFFICE.DLL") then (values "ProductName" of version blocks of files ("C:\Program Files\Microsoft Office\OFFICE11\NPOFFICE.DLL")) ELSE "Not Installed" ?>
Internet Explorer: :
<?relevance ((name of it & " " & version of it as string) of default web browser) ?>
Sessions TS
Nom des Sessions Ouvert en TS:
<?relevance trs of tds of ((name of it) of logged on users) ?>
.....................................
TS Desactivé mais encore Connecter:
<?relevance IF exist (name of logged on users whose (remote of it = true AND active of it = FALSE)) then(name of logged on users whose (remote of it = true AND active of it = FALSE)) else "Aucune Connexion" ?>
Patches
Correctif
Installer
<?relevance trs of (td of description of records whose (event id of it = 1074663705)) & (td of source of records whose = "NtServicePack" and (now - time generated of it < 14*day)) of system event log ?>
_____________________________________
Ce serveur a besoin de <?relevance number of relevant fixlets whose (exists header "Subject" of it and exists header "X-Fixlet-Source-Severity" of it and (not exists header "X-Fixlet-Type" of it or (value of header "X-Fixlet-Type" of it as lowercase != "task" and value of header "X-Fixlet-Type" of it as lowercase != "baseline")) and (not exists header "X-Fixlet-Type" of it or value of header "X-Fixlet-Type" of it as lowercase != "analysis")) of sites ?> fixlets
_____________________________________
Fixlet Name
Severity
Release Date
<?relevance trs of (td of value of header "Subject" of it & td of value of header "X-Fixlet-Source-Severity" of it & td of value of header "X-Fixlet-Source-Release-Date" of it) of relevant fixlets whose (exists header "Subject" of it and exists header "X-Fixlet-Source-Severity" of it and (not exists header "X-Fixlet-Type" of it or (value of header "X-Fixlet-Type" of it as lowercase != "task" and value of header "X-Fixlet-Type" of it as lowercase != "baseline")) and (not exists header "X-Fixlet-Type" of it or value of header "X-Fixlet-Type" of it as lowercase != "analysis")) of sites ?>
Here is some relevance to look through the system event log file:
q: (event id of it, category of it, source of it) of records whose (event type of it = error event log event type AND time generated of it > now - 1*day) of system event log
Thanks for the info, the relevance seems to work. As for the built-in progress tab, I am looking to show only the Fixlets, and not all actions run on the server, and I want to adjust it as needed. I also want 1 page where the information is all available. Plus when I run the built-in progress tab, I get whited out descriptions (which I guess refer to actions that have been cleaned off the BES server…
As for the refreshing, I saw that page, but it involves Java script, which I have no knowledge of at all. I will try to figure it out though. Maybe you could advise how to enter the following script into the __dashboard.html
var ageCheck = window.setInterval(“refreshNeeded()”, 60000);
function refreshNeeded()
{
lastRefresh = new Date(Date.parse(timestamp.innerText));
currentTime = new Date;
timeSinceLastRefresh = currentTime - lastRefresh;
if (timeSinceLastRefresh > 600000) {
location.href=‘cid:load?page=_dashboard.html’;
}
}
Also please advise how I would get the output from the Event Viewer relevance that you sent to output on different lines in the Client Dashboard. As it stands, they all append one after an other…
To add formatting around a relevance expression, you can add html like you did in some of the other places… here is an example:
<?relevance trs of (td of (event id of it as string) & td of (category of it as string) & td of source of it) of records whose (event type of it = error event log event type AND time generated of it > now - 1*day) of system event log?>
For the Fixlets, I think I need to understand better what you are looking for… You can list Fixlets, but an applied Fixlet is an action… I don’t think the client relevance exposes when Fixlets were relevant or not so I think you need to choose whether to show Fixlets or actions…
I see what you are trying to say, and it makes sense. I have figured out another way around it. I parse the event viewer for NtServicePack from the last day (or week, or month depending on what I want to show). It gives me what I am looking for.
As for the formatting, I inserted it and it advises me <The operator “td” is not defined.>
<?relevance trs of (td of (event id of it as string) & td of (category of it as string) & td of source of it) of records whose (event type of it = error event log event type AND time generated of it > now - 1*day) of system event log?>
I was “borrowing” a bit of your code and seem to run into a problem… We are running TEM 8.1 and pasting a section of you logic into a dashboard, it fails with .
The piece of code is:
<?relevance trs of (td of value of header "Subject" of it & td of value of header "X-Fixlet-Source-Severity" of it & td of value of header "X-Fixlet-Source-Release-Date" of it) of relevant fixlets whose (exists header "Subject" of it and exists header "X-Fixlet-Source-Severity" of it and (not exists header "X-Fixlet-Type" of it or (value of header "X-Fixlet-Type" of it as lowercase != "task" and value of header "X-Fixlet-Type" of it as lowercase != "baseline")) and (not exists header "X-Fixlet-Type" of it or value of header "X-Fixlet-Type" of it as lowercase != "analysis")) of sites ?>
Just wondering if you have this running under TEM 8.1 and if you had to modify the logic at all. Thx.
No it still works fine in 8.1. I must mention that this shows hidden fixlets, so I was not using it, as it caused lots of confusion for users looking for the missing patches.