How-to write Perl script for MongoDB
<DIV><DIV class=t_fsz>
<TABLE cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD id=postmessage_17305972 class=t_f>> db.foo.insert({"x":new Date(2010,0,24,9,23,34)}); <BR>> db.foo.insert({"x":new Date(2010,0,26,9,23,34)});<BR>> db.foo.insert({"x":new Date(2010,0,27,9,23,34)});<BR>> db.foo.insert({"x":new Date(2010,0,30,9,23,34)});<BR>> db.foo.insert({"x":new Date(2010,1,02,9,23,34)});<BR>> <BR>> db.foo.find(); <BR>{ "_id" : ObjectId("4d65bbec3ebb3cfc9ca664e0"), "x" : "Sun Jan 24 2010 09:23:34 GMT+0800 (CST)" }<BR>{ "_id" : ObjectId("4d65bbf23ebb3cfc9ca664e1"), "x" : "Tue Jan 26 2010 09:23:34 GMT+0800 (CST)" }<BR>{ "_id" : ObjectId("4d65bbf53ebb3cfc9ca664e2"), "x" : "Wed Jan 27 2010 09:23:34 GMT+0800 (CST)" }<BR>{ "_id" : ObjectId("4d65bbf93ebb3cfc9ca664e3"), "x" : "Sat Jan 30 2010 09:23:34 GMT+0800 (CST)" }<BR>{ "_id" : ObjectId("4d65bc023ebb3cfc9ca664e4"), "x" : "Tue Feb 02 2010 09:23:34 GMT+0800 (CST)" }<BR>> <BR>> db.foo.find({"x":{$lt:new Date(2010,0,27,9,23,34)}}); <BR>{ "_id" : ObjectId("4d65bbec3ebb3cfc9ca664e0"), "x" : "Sun Jan 24 2010 09:23:34 GMT+0800 (CST)" }<BR>{ "_id" : ObjectId("4d65bbf23ebb3cfc9ca664e1"), "x" : "Tue Jan 26 2010 09:23:34 GMT+0800 (CST)" }<BR>> <BR>> db.foo.find({"x":{$gt:new Date(2010,0,27,9,23,34)}}); <BR>{ "_id" : ObjectId("4d65bbf93ebb3cfc9ca664e3"), "x" : "Sat Jan 30 2010 09:23:34 GMT+0800 (CST)" }<BR>{ "_id" : ObjectId("4d65bc023ebb3cfc9ca664e4"), "x" : "Tue Feb 02 2010 09:23:34 GMT+0800 (CST)" }<BR>></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>
<TABLE>
<TBODY>
<TR>
<TD class=content>#!/usr/bin/perl </TD></TR></TBODY></TABLE>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>002</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>003</TD>
<TD class=content>use strict; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>004</TD>
<TD class=content>use warnings; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>005</TD>
<TD class=content>use Getopt::Std; # Parm passing routine </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>006</TD>
<TD class=content>use MongoDB; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>007</TD>
<TD class=content>use Time::Local; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>008</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>009</TD>
<TD class=content>format HEADER = </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>010</TD>
<TD class=content>------------------------------------------------------------------------------ </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>011</TD>
<TD class=content>Syntax : $0 -h vipname -p portnum -u usage </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>012</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>013</TD>
<TD class=content>Options: </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>014</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>015</TD>
<TD class=content> -h vipname </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>016</TD>
<TD class=content> -p portnum - default is 27017 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>017</TD>
<TD class=content> -u usage </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>018</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>019</TD>
<TD class=content>------------------------------------------------------------------------------ </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>020</TD>
<TD class=content>. </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>021</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>022</TD>
<TD class=content>my $hostname; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>023</TD>
<TD class=content>my $portnum; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>024</TD>
<TD class=content>my $dbconn; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>025</TD>
<TD class=content>my $dbadmin; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>026</TD>
<TD class=content>my $dbcollection; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>027</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>028</TD>
<TD class=content># --------------------- </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>029</TD>
<TD class=content># Main </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>030</TD>
<TD class=content># --------------------- </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>031</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>032</TD>
<TD class=content>&do_opts(); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>033</TD>
<TD class=content>&db_connect(); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>034</TD>
<TD class=content>&get_stats(); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>035</TD>
<TD class=content>&db_disconnect(); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>036</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>037</TD>
<TD class=content>sub do_opts { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>038</TD>
<TD class=content> #-------------------------------------------------------------------------- </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>039</TD>
<TD class=content> # Split the options and load variables </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>040</TD>
<TD class=content> #-------------------------------------------------------------------------- </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>041</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>042</TD>
<TD class=content> # Exempt these varaibles from needing to be declared </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>043</TD>
<TD class=content> use vars '$opt_h','$opt_p','$opt_u'; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>044</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>045</TD>
<TD class=content> my $returncode = getopts('h:pu') ; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>046</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>047</TD>
<TD class=content> &do_help if (defined $opt_u or $returncode != 1 ); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>048</TD>
<TD class=content> &do_help if (! $opt_h); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>049</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>050</TD>
<TD class=content> $hostname = $opt_h; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>051</TD>
<TD class=content> $portnum = 27017 || $opt_p; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>052</TD>
<TD class=content>} </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>053</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>054</TD>
<TD class=content>sub db_connect { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>055</TD>
<TD class=content> $dbconn = MongoDB::Connection->new(host => "<A href="mongodb:///" target=_blank>mongodb://</A>$hostname:$portnum"); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>056</TD>
<TD class=content> $dbadmin = $dbconn->admin; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>057</TD>
<TD class=content>} </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>058</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>059</TD>
<TD class=content>sub db_disconnect { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>060</TD>
<TD class=content>} </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>061</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>062</TD>
<TD class=content>sub do_help { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>063</TD>
<TD class=content> #-------------------------------------------------------------------------- </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>064</TD>
<TD class=content> # Give help screen and exit </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>065</TD>
<TD class=content> #-------------------------------------------------------------------------- </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>066</TD>
<TD class=content> $~ = "HEADER"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>067</TD>
<TD class=content> write; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>068</TD>
<TD class=content> &quit(0); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>069</TD>
<TD class=content>} </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>070</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>071</TD>
<TD class=content>sub quit { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>072</TD>
<TD class=content> exit; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>073</TD>
<TD class=content>} </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>074</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>075</TD>
<TD class=content>sub get_stats { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>076</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>077</TD>
<TD class=content> my $result = $dbadmin->run_command({serverStatus => 1}); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>078</TD>
<TD class=content> #my $result = $dbadmin->run_command({'serverStatus' => 1, 'repl' => 2}); #didn't work with 2 parameters </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>079</TD>
<TD class=content> #my $result = $dbadmin->get_collection('$cmd')->find_one(Tie::IxHash->new('serverStatus' => 1, 'repl' => 2)); #works, but complex syntax </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>080</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>081</TD>
<TD class=content> print "current : $result->{connections}->{current}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>082</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>083</TD>
<TD class=content> print "resident : $result->{mem}->{resident}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>084</TD>
<TD class=content> print "mapped : $result->{mem}->{mapped}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>085</TD>
<TD class=content> print "virtual : $result->{mem}->{virtual}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>086</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>087</TD>
<TD class=content> print "accesses : $result->{indexCounters}->{btree}->{accesses}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>088</TD>
<TD class=content> print "hits : $result->{indexCounters}->{btree}->{hits}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>089</TD>
<TD class=content> print "misses : $result->{indexCounters}->{btree}->{misses}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>090</TD>
<TD class=content> print "resets : $result->{indexCounters}->{btree}->{resets}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>091</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>092</TD>
<TD class=content> print "flushes : $result->{backgroundFlushing}->{flushes}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>093</TD>
<TD class=content> print "total_ms : $result->{backgroundFlushing}->{total_ms}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>094</TD>
<TD class=content> print "average_ms : $result->{backgroundFlushing}->{average_ms}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>095</TD>
<TD class=content> print "last_ms : $result->{backgroundFlushing}->{last_ms}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>096</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>097</TD>
<TD class=content> print "insert : $result->{opcounters}->{insert}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>098</TD>
<TD class=content> print "query : $result->{opcounters}->{query}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>099</TD>
<TD class=content> print "update : $result->{opcounters}->{update}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>100</TD>
<TD class=content> print "delete : $result->{opcounters}->{delete}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>101</TD>
<TD class=content> print "getmore : $result->{opcounters}->{getmore}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>102</TD>
<TD class=content> print "command : $result->{opcounters}->{command}\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>103</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>104</TD>
<TD class=content> my $lagsec = -1; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>105</TD>
<TD class=content> my $primary_optimeDate; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>106</TD>
<TD class=content> my $primary_time; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>107</TD>
<TD class=content> my $my_optimeDate; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>108</TD>
<TD class=content> my $my_time; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>109</TD>
<TD class=content> $result = $dbadmin->run_command({replSetGetStatus => 1}); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>110</TD>
<TD class=content> foreach my $repl ( @{$result->{members}} ) { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>111</TD>
<TD class=content> if ($repl->{stateStr} eq "PRIMARY") { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>112</TD>
<TD class=content> $primary_optimeDate = $repl->{optimeDate}; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>113</TD>
<TD class=content> } </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>114</TD>
<TD class=content> if (exists($repl->{self}) && $repl->{self} == 1) { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>115</TD>
<TD class=content> $my_optimeDate = $repl->{optimeDate}; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>116</TD>
<TD class=content> } </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>117</TD>
<TD class=content> } </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>118</TD>
<TD class=content> </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>119</TD>
<TD class=content> #data format: 2011-09-20T21:08:04 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>120</TD>
<TD class=content> #print "$primary_optimeDate : $my_optimeDate\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>121</TD>
<TD class=content> if($primary_optimeDate =~ /(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)/) { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>122</TD>
<TD class=content> my ($p_sec, $p_min, $p_hour, $p_day, $p_mon,$p_year) = ($6, $5, $4, $3, $2, $1); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>123</TD>
<TD class=content> $p_mon = $p_mon - 1; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>124</TD>
<TD class=content> $p_year = $p_year - 1900; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>125</TD>
<TD class=content> $primary_time = timegm($p_sec, $p_min, $p_hour, $p_day, $p_mon,$p_year); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>126</TD>
<TD class=content> } </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>127</TD>
<TD class=content> if($my_optimeDate =~ /(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)/) { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>128</TD>
<TD class=content> my ($m_sec, $m_min, $m_hour, $m_day, $m_mon,$m_year) = ($6, $5, $4, $3, $2, $1); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>129</TD>
<TD class=content> #print "$m_sec, $m_min, $m_hour, $m_day, $m_mon, $m_year\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>130</TD>
<TD class=content> $m_mon = $m_mon - 1; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>131</TD>
<TD class=content> $m_year = $m_year - 1900; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>132</TD>
<TD class=content> $my_time = timegm($m_sec, $m_min, $m_hour, $m_day, $m_mon,$m_year); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>133</TD>
<TD class=content> } </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>134</TD>
<TD class=content> $lagsec = $primary_time - $my_time if($my_time && $primary_time); </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>135</TD>
<TD class=content> print "$primary_time: $my_time\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>136</TD>
<TD class=content> print "lagSeconds : $lagsec\n"; </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>137</TD>
<TD class=content>}</TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1"> </DIV>
<DIV class="line alt1"> </DIV>
<DIV class="line alt1"> </DIV>
<DIV class="line alt1"> </DIV>
<DIV class="line alt1"> </DIV>
<DIV class="line alt1">The script run 2 commands to get the MongoDB status. We can get the same by run db._adminCommand({serverStatus : 1}) and db._adminCommand({replSetGetStatus : 1}) in MongoDB Shell . Let’s take a look at the output of the later one:</DIV>
<DIV class="line alt1">---------------------------------------------------------------</DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=content>shared:PRIMARY> db._adminCommand({replSetGetStatus : 1}); </TD></TR></TBODY></TABLE>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>02</TD>
<TD class=content>{ </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>03</TD>
<TD class=content> <FONT color=#0000ff>"set"</FONT> : <FONT color=#0000ff>"shared"</FONT>, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>04</TD>
<TD class=content> <FONT color=#0000ff>"date"</FONT> : ISODate(<FONT color=#0000ff>"2011-09-22T14:36:40Z"</FONT>), </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>05</TD>
<TD class=content> <FONT color=#0000ff>"myState"</FONT> : 1, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>06</TD>
<TD class=content> <FONT color=#0000ff>"members"</FONT> : [ </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>07</TD>
<TD class=content> { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>08</TD>
<TD class=content> <FONT color=#0000ff>"_id"</FONT> : 0, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>09</TD>
<TD class=content> <FONT color=#0000ff>"name"</FONT> : <FONT color=#0000ff>"shared.mongodb.org:27017"</FONT>, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>10</TD>
<TD class=content> <FONT color=#0000ff>"health"</FONT> : 1, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>11</TD>
<TD class=content> <FONT color=#0000ff>"state"</FONT> : 2, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>12</TD>
<TD class=content> <FONT color=#0000ff>"stateStr"</FONT> : <FONT color=#0000ff>"SECONDARY"</FONT>, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>13</TD>
<TD class=content> <FONT color=#0000ff>"uptime"</FONT> : 28033, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>14</TD>
<TD class=content> <FONT color=#0000ff>"optime"</FONT> : { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>15</TD>
<TD class=content> <FONT color=#0000ff>"t"</FONT> : 1316677688000, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>16</TD>
<TD class=content> <FONT color=#0000ff>"i"</FONT> : 2 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>17</TD>
<TD class=content> }, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>18</TD>
<TD class=content> <FONT color=#0000ff>"optimeDate"</FONT> : ISODate(<FONT color=#0000ff>"2011-09-22T07:48:08Z"</FONT>), </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>19</TD>
<TD class=content> <FONT color=#0000ff>"lastHeartbeat"</FONT> : ISODate(<FONT color=#0000ff>"2011-09-22T14:36:39Z"</FONT>) </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>20</TD>
<TD class=content> }, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>21</TD>
<TD class=content> { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>22</TD>
<TD class=content> <FONT color=#0000ff>"_id"</FONT> : 1, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>23</TD>
<TD class=content> <FONT color=#0000ff>"name"</FONT> : <FONT color=#0000ff>"shared.mongodb.org:27017"</FONT>, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>24</TD>
<TD class=content> <FONT color=#0000ff>"health"</FONT> : 1, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>25</TD>
<TD class=content> <FONT color=#0000ff>"state"</FONT> : 1, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>26</TD>
<TD class=content> <FONT color=#0000ff>"stateStr"</FONT> : <FONT color=#0000ff>"PRIMARY"</FONT>, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>27</TD>
<TD class=content> <FONT color=#0000ff>"optime"</FONT> : { </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>28</TD>
<TD class=content> <FONT color=#0000ff>"t"</FONT> : 1316677688000, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>29</TD>
<TD class=content> <FONT color=#0000ff>"i"</FONT> : 2 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>30</TD>
<TD class=content> }, </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>31</TD>
<TD class=content> <FONT color=#0000ff>"optimeDate"</FONT> : ISODate(<FONT color=#0000ff>"2011-09-22T07:48:08Z"</FONT>), </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>32</TD>
<TD class=content> <FONT color=#0000ff>"self"</FONT> : true </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>33</TD>
<TD class=content> } </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>34</TD>
<TD class=content> ], </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>35</TD>
<TD class=content> <FONT color=#0000ff>"ok"</FONT> : 1 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>36</TD>
<TD class=content>}</TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">---------------------------------------------------------------------------------</DIV>
<DIV class="line alt2">By comparing the output of MongoDB Shell command and the result in Perl. We can find that the result in Perl is mapped to a hash value, and the value of the hash may be a value, a hash or a array. It’s very easy to get the value we want. Here are the script output example:</DIV>
<DIV class="line alt2">-------------------------------------------------------------------------</DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=content>./getMongoDBStats.pl -h sharedmongo1.mongodb.com </TD></TR></TBODY></TABLE>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>02</TD>
<TD class=content>current : 3 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>03</TD>
<TD class=content>resident : 33 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>04</TD>
<TD class=content>mapped : 1392 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>05</TD>
<TD class=content>virtual : 3915 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>06</TD>
<TD class=content>accesses : 1 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>07</TD>
<TD class=content>hits : 1 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>08</TD>
<TD class=content>misses : 0 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>09</TD>
<TD class=content>resets : 0 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>10</TD>
<TD class=content>flushes : 10508 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>11</TD>
<TD class=content>total_ms : 27876 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>12</TD>
<TD class=content>average_ms : 2.65283593452608 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>13</TD>
<TD class=content>last_ms : 0 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>14</TD>
<TD class=content>insert : 0 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>15</TD>
<TD class=content>query : 9 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>16</TD>
<TD class=content>update : 164909 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>17</TD>
<TD class=content><FONT color=#ff1493>delete</FONT> : 32 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>18</TD>
<TD class=content>getmore : 164897 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>19</TD>
<TD class=content>command : 253693 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt2">
<TABLE>
<TBODY>
<TR>
<TD class=number>20</TD>
<TD class=content>1316677688: 1316677688 </TD></TR></TBODY></TABLE></DIV>
<DIV class="line alt1">
<TABLE>
<TBODY>
<TR>
<TD class=number>21</TD>
<TD class=content>lagSeconds : 0</TD></TR></TBODY></TABLE></DIV>
<P>Of course, it’s a quite simple one for MongoDB administrator. But it’s a good and great start <IMG class=wp-smiley alt=:) src="http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif?m=1305258975g"> </P></DIV></DIV></DIV>
页:
[1]