PROJEKT PV178 – WINDOWS SERVICE CPUSPY
Úlohou je naprogramovať Windows službu bežiacu na pozadí medzi ostatnými službami Windows (spustite zo
štart menu services.msc).
ÚČEL SLUŽBY
Služba bude na pozadí monitorovať využitie procesoru jednotlivými procesmi bežiacimi na PC (teda niečo
obdobné ako časť funkcionality Task Managera) a z nich vypočítavať priemerné zataženie procesora každým
procesom v čase.
Napríklad každých 5 minút podá priemer využitia procesora za poslednú hodinu pre každý proces.
Z konfiguračného súboru app.config si služba načíta spomenuté dva parametre (teda ako často poskytnúť
vypočítaný priemer, a z akej periódy vypočítať daný priemer).
HINT: Trieda ConfigurationManager a trieda PerformanceCounter.
MODULY PRE VÝSTUP
Služba bude zistené štatistiky reportovať a zaznamenávať rôznymi formami pomocou modulov. Modul je trieda
implementujúca nasledovné rozhranie ICpuAverageUsageReporter. Služba vlastní kolekciu týchto modulov a na
každom zavolá ReportUsage vždy keď má podľa parametra z app.config poskytnúť výpočet.
///
/// Reporting modul contract for MEF
///
interface ICpuAverageReporter
{
///
/// Reports average CPU usage per process
///
///
void ReportUsage(IEnumerable averageCpuUsages);
}
///
/// Reported unit of meassured CPU usage
///
public struct ProcessAverageCpuUsage
{
///
/// Timestamp of reported usage
///
public DateTimeOffset ReportTimestamp { get; set; }
///
/// Period over which average was computed
///
public TimeSpan Period { get; set; }
///
/// Name of process
///
public string ProcessName { get; set; }
///
/// Avarage cpu usage in %
///
public double AverageCpuUsage { get; set; }
}
Tieto moduly si služba načíta z adresára plug-ins, ktorá sa bude nachádzať v zložke kde je služba nainštalovaná.
Budú tam vo forme .dll súborov. Túto funkcionalitu naprogramujte s využitím MEF:
- Managed Extensibility Framework Overview:
http://msdn.microsoft.com/en-us/library/dd460648.aspx
- MEF Community Site
http://mef.codeplex.com/.
Moduly musia zvládnuť nasledovnú situáciu: ak by užívatel napísal plug-in, na ktorom by volanie metódy
ReportUsage trvalo príliš dlho (napríklad zapisuje na floppy disk ), nebudú ostatné moduli čakať a služba
bude normálne pracovať a predpokladať že modul nakoniec v rozumnom čase odpovie.
MODULY K IMPLEMENTOVANIU
K službe patria v základe dva moduly, prvý (eventlog) sa nainštaluje priamo so službou, druhý bude dodávaný
ako .dll súbor pre možné nakopírovanie do adresára plug-ins.
EVENTLOG MODUL
Modul zapíše pri každom zavolaní ReportUsage prvých 5 procesov, ktoré najviac vyťažujú procesor. Každý tento
záznam bude reprezentovaný záznamom typu info vo vytvorenom novom eventlogu nazvanom CpuSpyLog.
XML MODUL
Modul zapíše (niekam rozumne) každú hodinu nový xml súbor v ktorom bude serializovaný posledný
reportovaný údaj. Teda napríklad pri 5 minutovej perióde volania ReportUsage prakticky použije každý
dvanácty údaj, pri dvojhodinovej perióde zapíše 2x ten istý.
HINT: Trieda Timer.
NEPOVINNY BONUS
Služba sa bude dať nainštalovať pomocou jednoduchého .msi balíčku. Toto nie je nevyhnutná súčasť zadania
ale môže výrazne prilepšiť pri hodnotení hotového projektu.