Fråga : Designen utfärdar och att lagra daterar från /proc

Hi

This är mer som får någon återkoppling av min design därefter ett faktiskt problem för att lösa. Jag tänkte att jag skulle ger det ett försök, sedan du grabbar har varit så hjälpsam tidigare.

Ok här det är. Pröva förmiddag I att skriva programet för A.C. ++ som går att ta ett kort av den /proc filesystemen. Så långt jag har skriftligt en parser som parse varje pid-dir. Kortet som därefter ska, är en klassificera som inneslutar procen, strukturerar att den pröva I-förmiddagen för att planlägga.
för

[ProcInfo]  |-----1312--[Dir]
  |                   |
  |                   |---smap--[Spara],
  |                   |                   |--RSS--[
för data]  |                   |                   |--USS--[
för data]  |                   |                   |--PSS--[
för data]  |                   |---cmdline--[Spara],
  |                   |                    |--cmd--[
för data]  |                   |---netto--[Dir]
  |                                  |---sockstat6--[Spara],
  |                                  |                         |--TCP6--[
för data]  |---meminfo--[Spara],
                         |---memtotal--[Spara] [=A för

[ProcInfo] för data] klassificerar att föreställa proc som bör överta den faktiska =Aen för kortclass
[Dir] klassificerar att föreställa en dir i proc, som bör överta den faktiska =Aen för kortclass
klassificerar att föreställa en spara i proc, som bör överta den faktiska =Aen för kortclass
[data] klassificerar att föreställa datan, som kort {faktiskt utan laga kraft för parseren returns.

class för
fästar (Snapshot*) = 0;
};

class Dir : offentliga Snapshot
{
för
för
……….,privat
:
std: map*mpDataen;
};

class sparar: offentliga Snapshot
{
för
för
……….,privat
:
std: map*mpDataen;
};


class ProcInfo : offentliga Dir
{
för
…….,
}; skulle därefter något liknande för

I som använder detta i en tråd, kör varje sekund 10 och att ta ett kort av proc för /ptoc

ProcHandler; *procInfo för
ProcInfo = proc.snapshot (); pidSnapshot för

Dir = procInfo->getPid (1312); data för
Data = pidSnapshot.get (ProcInfo:: RSS); rss för
int = data.toInt (); sRss för
string = data.toString (); memSnapshot för

File = procInfo->getSystem (ProcInfo:: MEM); data för
Data = memSnapshot.get (ProcInfo:: MEMTOTAL); mem för
int för = data.toInt (); sMem för
string = data.toString ();

delete procInfo;kommentarer för

Any på denna skulle design är mycket uppskattade även lilla behov för I precis att få någon matningsbaksida. Jag har stirrat på denna design till long och I-funderare att jag har låst min själv in till denna designen. Jag behöver något nytt synar för att ta en look på den, och kanske de kan se några problem eller kanske mycket bättre design.


" klar "

Svar : Designen utfärdar och att lagra daterar från /proc


Verkar ok till mig, men, sedan du frågade för nya idéer, går här --

- Som en materia av pref/smak mig skulle den mycket snarlika uppehället som omvandlingsnonna-members gillar, så jag inte måste att förorena ha kontakt och låter någon ny omvandling tillfogas till systemet lätt. Men, som jag sade, det är en materia av smak kanske.

Omvänd (data D);
Omvänd (D);

- Sedan du den omtalade minimera serveren snubblar och bandbredden och använde coincidently ”kortet” formulerar, det är naturligt till funderare också av ”differentiella kort”. Så idén är att du tar ett primärt kort.

Dir pidSnapshot = procInfo->getPid (1312);
SnapShot* skillnad = pidSnapshot->difference ();

Kort:: skillnad ();
Kort:: applyDifferential (Snapshot* D)

Så att långt, värderar endast som har ändring, sedan det sist tillfångatagandet att ska gås tillbaka och som kan orsaka enorma besparingar in, benämner av kapacitet.

- Är du säker procfilesystemen har inte symboliskt anknyter (jag betyder den samma enheten som visas under multipelbikupar)? Om ja, är därefter den som ok uppehälle två kopierar av den samma utgångspunkten. Jag gissar den betyder inte mycket, så länge som det rättvisa kortet en värdera anmärker.

- Ganska än ha sorten för getPid () etc. av mycket specifika accessors, det skulle är mer meningsfull, om du kunde ha i basera klassificerar en generisk uppsättning av något att säga för metoder för fyndet () den lika

faktiskt Snapshot* kort:: fynd (stränga barnet) {
}

Också hur om kortet basera som har barn

klassificera SnapshotContainer: offentligt kort
{
faktiskt Snapshot* kort:: fynd (stränga barnet) {
}
privat:
  std: kartlägga *mpDataen;
};

- Skulle var hjälpsam, om du ger också en obetydlig men viktig variation för fynd (), appellen som den lokaliserar () det tar en bana (ganska än känt) och gör smutsa nerjobbet av att göra korsa.

den // banan är i denna bildar, /root/net/sockstats/tcpip6
Snapshot* kort:: lokalisera (stränga banan) {
}

- Den viktigaste ändringen, som jag skulle, gör skulle för att vara att göra kortet en hänvisa till som räknas för att anmärka och gås tillbaka ett smart/en refptr till kortet som är snarlikt än rå pekare. Det ger egentligen en radda driver, när speciellt du önskar att vara kompetent att hämta barn och uppehället de runt om (kanske)

klassificera kortet: offentliga RefCounted // ser Poco:: RefCounted för referens.
{
}

typedef RefCountedPtr RefSnapshot;

Hoppas dessa hjälp…,
Andra lösningar  
 
programming4us programming4us