On Mon, Apr 19, 2010 at 3:12 PM, Derrick Brashear <[email protected]> wrote: > ---------- Forwarded message ---------- > From: Mohammed Gamal <[email protected]> > Date: Sun, Apr 18, 2010 at 6:03 PM > Subject: [PATCH] Add -xml commandline option to vos examine > To: [email protected] > > > This patch adds a -xml commandline switch to generate > a machine readable format from vos examine in XML. > It's pretty quick and dirty. So your feedback is greatly > appreciated. > > Signed-off-by: Mohammed Gamal <[email protected]> > --- > src/volser/vos.c | 120 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 120 insertions(+), 0 deletions(-) > > diff --git a/src/volser/vos.c b/src/volser/vos.c > index 648606e..288b5f5 100644 > --- a/src/volser/vos.c > +++ b/src/volser/vos.c > @@ -1149,6 +1149,121 @@ DisplayFormat2(long server, long partition, > volintInfo *pntr) > } > > static void > +DisplayXML(long server, long partition, volintInfo *pntr) > +{ > + static long server_cache = -1, partition_cache = -1; > + static char hostname[256], address[32], pname[16]; > + time_t t; > + > + if (server != server_cache) { > + struct in_addr s; > + > + s.s_addr = server; > + strcpy(hostname, hostutil_GetNameByINet(server)); > + strcpy(address, inet_ntoa(s)); > + server_cache = server; > + } > + if (partition != partition_cache) { > + MapPartIdIntoName(partition, pname); > + partition_cache = partition; > + } > + > + fprintf(STDOUT, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"); > + fprintf(STDOUT, "\t<info>\n"); /* Should we select some better name? */ > + if (pntr->status == VOK) > + fprintf(STDOUT, "\t\t<name>%s</name>\n", pntr->name); > + > + fprintf(STDOUT, "\t\t<id>%lu</id>\n", > + afs_printable_uint32_lu(pntr->volid)); > + fprintf(STDOUT, "\t\t<serv>%s\t%s</serv>\n", address, hostname); > + fprintf(STDOUT, "\t\t<part>%s</part>\n", pname); > + fprintf(STDOUT, "\t\t<status>"); > + switch (pntr->status) { > + case VOK: > + fprintf(STDOUT, "OK"); > + break; > + case VBUSY: > + fprintf(STDOUT, "BUSY"); > + return; > + default: > + fprintf(STDOUT, "UNATTACHABLE"); > + return; > + } > + fprintf(STDOUT, "</status>\n"); > + fprintf(STDOUT, "\t\t<backupID>%lu</backupID>\n", > + afs_printable_uint32_lu(pntr->backupID)); > + fprintf(STDOUT, "\t\t<parentID>%lu</parentID>\n", > + afs_printable_uint32_lu(pntr->parentID)); > + fprintf(STDOUT, "\t\t<cloneID>%lu</cloneID>\n", > + afs_printable_uint32_lu(pntr->cloneID)); > + fprintf(STDOUT, "\t\t<inUse>%s</inUse>\n", pntr->inUse ? "Y" : "N"); > + fprintf(STDOUT, "\t\t<needsSalvaged>%s</needsSalvaged>\n", > pntr->needsSalvaged ? "Y" : "N"); > + /* 0xD3 is from afs/volume.h since I had trouble including the file */ > + fprintf(STDOUT, "\t\t<destroyMe>%s</destroyMe>\n", > pntr->destroyMe == 0xD3 ? "Y" : "N"); > + fprintf(STDOUT, "\t\t<type>"); > + switch (pntr->type) { > + case 0: > + fprintf(STDOUT, "RW"); > + break; > + case 1: > + fprintf(STDOUT, "RO"); > + break; > + case 2: > + fprintf(STDOUT, "BK"); > + break; > + default: > + fprintf(STDOUT, "?"); > + break; > + } > + fprintf(STDOUT, "</type>\n"); > + > + /* ctime() appends a newline character at the end of the date string. > + * Get around that by enclosing tags on different lines and adjusting > + * tab levels */ > + t = pntr->creationDate; > + fprintf(STDOUT, > "\t\t<creationDate>\n\t\t\t%-9lu\t%s\t\t</creationDate>\n", > + afs_printable_uint32_lu(pntr->creationDate), > + ctime(&t)); > + > + t = pntr->accessDate; > + fprintf(STDOUT, "\t\t<accessDate>\n\t\t\t%-9lu\t%s\t\t</accessDate>\n", > + afs_printable_uint32_lu(pntr->accessDate), > + ctime(&t)); > + > + t = pntr->updateDate; > + fprintf(STDOUT, "\t\t<updateDate>\n\t\t\t%-9lu\t%s\t\t</updateDate>\n", > + afs_printable_uint32_lu(pntr->updateDate), > + ctime(&t)); > + > + t = pntr->backupDate; > + fprintf(STDOUT, "\t\t<backupDate>\n\t\t\t%-9lu\t%s\t\t</backupDate>\n", > + afs_printable_uint32_lu(pntr->backupDate), > + ctime(&t)); > + > + t = pntr->copyDate; > + fprintf(STDOUT, "\t\t<copyDate>\n\t\t\t%-9lu\t%s\t\t</copyDate>\n", > + afs_printable_uint32_lu(pntr->copyDate), > + ctime(&t)); > + > + fprintf(STDOUT, "\t\t<flags>%#lx</flags>\n", > + afs_printable_uint32_lu(pntr->flags)); > + fprintf(STDOUT, "\t\t<diskused>%u</diskused>\n", pntr->size); > + fprintf(STDOUT, "\t\t<maxquota>%u</maxquota>\n", pntr->maxquota); > + fprintf(STDOUT, "\t\t<minquota>%lu</minquota>\n", > + afs_printable_uint32_lu(pntr->spare0)); > + fprintf(STDOUT, "\t\t<filecount>%u</filecount>\n", pntr->filecount); > + fprintf(STDOUT, "\t\t<dayUse>%u</dayUse>\n", pntr->dayUse); > + fprintf(STDOUT, "\t\t<weekUse>%lu</weekUse>\n", > + afs_printable_uint32_lu(pntr->spare1)); > + fprintf(STDOUT, "\t\t<spare2>%lu</spare2>\n", > + afs_printable_uint32_lu(pntr->spare2)); > + fprintf(STDOUT, "\t\t<spare3>%lu</spare3>\n", > + afs_printable_uint32_lu(pntr->spare3)); > + fprintf(STDOUT, "\t</info>\n"); > + return; > +} > + > +static void > DisplayVolumes2(long server, long partition, volintInfo *pntr, long count) > { > long i; > @@ -1643,6 +1758,9 @@ ExamineVolume(register struct cmd_syndesc *as, > void *arock) > else if (as->parms[2].items) { > DisplayFormat2(aserver, apart, pntr); > EnumerateEntry(&entry); > + } else if (as->parms[3].items) { > + DisplayXML(aserver, apart, pntr); > + EnumerateEntry(&entry); > } else > VolumeStats_int(pntr, &entry, aserver, apart, voltype); > > @@ -6101,6 +6219,8 @@ main(int argc, char **argv) > "list extended volume fields"); > cmd_AddParm(ts, "-format", CMD_FLAG, CMD_OPTIONAL, > "machine readable format"); > + cmd_AddParm(ts, "-xml", CMD_FLAG, CMD_OPTIONAL, > + "xml format"); > COMMONPARMS; > cmd_CreateAlias(ts, "volinfo"); > > -- > 1.6.3.3 > > > > > -- > Derrick > _______________________________________________ > OpenAFS-devel mailing list > [email protected] > https://lists.openafs.org/mailman/listinfo/openafs-devel >
BTW, I was considering sending the patch to the mailing list, but I preferred to post it directly to the mentors so that other students can come up with patches on their own. Is that OK? Regards, Mohammed _______________________________________________ OpenAFS-devel mailing list [email protected] https://lists.openafs.org/mailman/listinfo/openafs-devel
