求助各位朋友RRDvue devtools 安装装不上.帮忙看看

当前位置: &
& 查看源码
rrd_update.c
rrd_update.c:源码内容
/*****************************************************************************
&*&RRDtool&1.0.50&&Copyright&Tobias&Oetiker,&1997&-&2000
&*****************************************************************************
&*&rrd_update.c&&RRD&Update&Function
&*****************************************************************************
&*&$Id:&rrd_update.c,v&1.1.1.1&&10:21:38&oetiker&Exp&$
&*&$Log:&rrd_update.c,v&$
&*&Revision&1.1.1.1&&&10:21:38&&oetiker
&*&Intial&Import
&*****************************************************************************/
#include&&rrd_tool.h&
#include&&sys/types.h&
#include&&fcntl.h&
#ifdef&WIN32
&#include&&sys/locking.h&
&#include&&sys/stat.h&
&#include&&io.h&
/*&Prototypes&*/
int&LockRRD(FILE&*rrd_file);
/*#define&DEBUG&*/
#ifdef&STANDALONE
main(int&argc,&char&**argv){
&&&&&&&&rrd_update(argc,argv);
&&&&&&&&if&(rrd_test_error())&{
&&&&&&&&&&&&&&&&printf(&RRDtool&1.0.50&&Copyright&&by&Tobias&Oetiker&&tobi@oetiker.ch&nn&
&&&&&&&&&&&&&&&&&&&&&&&&&Usage:&rrdupdate&filenamen&
&&&&&&&&&&&&&&&&&&&&&&&&&ttt[--template|-t&ds-name:ds-name:...]n&
&&&&&&&&&&&&&&&&&&&&&&&&&ttttime|N:value[:value...]nn&
&&&&&&&&&&&&&&&&&&&&&&&&&ttt[&time:value[:value...]&..]nn&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&printf(&ERROR:&%sn&,rrd_get_error());
&&&&&&&&&&&&&&&&rrd_clear_error();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&return&1;
&&&&&&&&return&0;
rrd_update(int&argc,&char&**argv)
&&&&int&&&&&&&&&&&&&&arg_i&=&2;
&&&&long&&&&&&&&&&&&&i,ii,
&&&&unsigned&long&&&&rra_&&&&&&&&&&/*&byte&pointer&to&the&rra
&&*&area&in&the&rrd&file.&&this
&&*&pointer&never&changes&value&*/
&&&&unsigned&long&&&&rra_&&&&&&&&&&/*&byte&pointer&to&the&rra
&&*&area&in&the&rrd&file.&&this
&&*&pointer&changes&as&each&rrd&is
&&*&processed.&*/
&&&&unsigned&long&&&&rra_&&&&&&&&/*&byte&pointer&to&the&current&write
&&*&spot&in&the&rrd&file.&*/
&&&&unsigned&long&&&&rra_pos_&&&&&&&&/*&temporary&byte&pointer.&*/
&&&&unsigned&long&&&&interval,
pre_int,post_&&&&&&&&&&&&&&&&/*&interval&between&this&and
&&*&the&last&run&*/
&&&&unsigned&long&&&&proc_pdp_&&&&&&&&/*&which&pdp_st&was&the&last
&&*&to&be&processed&*/
&&&&unsigned&long&&&&occu_pdp_&&&&&&&&/*&when&was&the&pdp_st
&&*&before&the&last&update
&&*&time&*/
&&&&unsigned&long&&&&proc_pdp_&&&&&&&/*&how&old&was&the&data&in
&&*&the&pdp&prep&area&when&it
&&*&was&last&updated&*/
&&&&unsigned&long&&&&occu_pdp_&&&&&&&/*&how&long&ago&was&the&last
&&*&pdp_step&time&*/
&&&&unsigned&long&&&&pdp_&&&&&&&&&&&&&/*&helper&for&cdp_prep&
&&*&processing&*/
&&&&rrd_value_t&&&&&&*pdp_&&&&&&&&&&&/*&prepare&the&incoming&data
&&*&to&be&added&the&the
&&*&existing&entry&*/
&&&&rrd_value_t&&&&&&*pdp_&&&&&&&&&&/*&prepare&the&pdp&values&
&&*&to&be&added&the&the
&&*&cdp&values&*/
&&&&long&&&&&&&&&&&&&*tmpl_&&&&&&&&&&/*&index&representing&the&settings
&&&&transported&by&the&template&index&*/
&&&&long&&&&&&&&&&&&&tmpl_cnt&=&2;&&&&&&&/*&time&and&data&*/
&&&&FILE&&&&&&&&&&&&&*rrd_
&&&&rrd_t&&&&&&&&&&&&
&&&&time_t&&&&&&&&&&&current_time&=&time(NULL);
&&&&char&&&&&&&&&&&&&**
&&&&int&&&&&&&&&&&&&&wrote_to_file&=&0;
&&&&char&&&&&&&&&&&&&*template&=&NULL;&&&&&&&&&&
&&&&char&&&&&&&&&&&&&*&/*&used&in&the&conversion&*/
&&&&while&(1)&{
static&struct&option&long_options[]&=
&&&&{&template&,&&&&&&required_argument,&0,&'t'},
&&&&{0,0,0,0}
int&option_index&=&0;
opt&=&getopt_long(argc,&argv,&&t:&,&
&&long_options,&&option_index);
if&(opt&==&EOF)
switch(opt)&{
&&&&template&=&
&&&&rrd_set_error(&unknown&option&'%s'&,argv[optind-1]);
&&&&return(-1);
&&&&/*&need&at&least&2&arguments:&filename,&data.&*/
&&&&if&(argc-optind&&&2)&{
rrd_set_error(&Not&enough&arguments&);
return&-1;
&&&&if(rrd_open(argv[optind],&rrd_file,&rrd,&RRD_READWRITE)==-1){
return&-1;
&&&&rra_current&=&rra_start&=&rra_begin&=&ftell(rrd_file);
&&&&/*&This&is&defined&in&the&ANSI&C&standard,&section&7.9.5.3:
&&&&&&&&When&a&file&is&opened&with&udpate&mode&('+'&as&the&second
&&&&&&&&or&third&character&in&the&...&list&of&mode&argument
&&&&&&&&variables),&both&input&and&output&may&be&performed&on&the
&&&&&&&&associated&stream.&&However,&...&&input&may&not&be&directly
&&&&&&&&followed&by&output&without&an&intervening&call&to&a&file
&&&&&&&&positioning&function,&unless&the&input&operation&encounters
&&&&&&&&end-of-file.&*/
&&&&fseek(rrd_file,&0,&SEEK_CUR);
&&&&/*&get&exclusive&lock&to&whole&file.
&&&&&*&lock&gets&removed&when&we&close&the&file.
&&&&if&(LockRRD(rrd_file)&!=&0)&{
&&&&&&rrd_set_error(&could&not&lock&RRD&);
&&&&&&rrd_free(&rrd);
&&&&&&fclose(rrd_file);
&&&&&&return(-1);&&&
&&&&if((updvals&=&malloc(&sizeof(char*)&*&(rrd.stat_head-&ds_cnt+1)))==NULL){
rrd_set_error(&allocating&updvals&pointer&array&);
rrd_free(&rrd);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&if&((pdp_temp&=&malloc(sizeof(rrd_value_t)
&&&*rrd.stat_head-&ds_cnt))==NULL){
rrd_set_error(&allocating&pdp_temp&...&);
free(updvals);
rrd_free(&rrd);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&if&((tmpl_idx&=&malloc(sizeof(unsigned&long)
&&&*(rrd.stat_head-&ds_cnt+1)))==NULL){
rrd_set_error(&allocating&tmpl_idx&...&);
free(pdp_temp);
free(updvals);
rrd_free(&rrd);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&/*&initialize&template&redirector&*/
&&&&/*&default&config
&&&&&&&tmpl_idx[0]&-&&0;&(time)
&&&&&&&tmpl_idx[1]&-&&1;&(DS&0)
&&&&&&&tmpl_idx[2]&-&&2;&(DS&1)
&&&&&&&tmpl_idx[3]&-&&3;&(DS&2)
&&&&&&&...&*/
&&&&for&(i=0;i&=rrd.stat_head-&ds_i++)&tmpl_idx[i]=i;
&&&&tmpl_cnt=rrd.stat_head-&ds_cnt+1;
&&&&if&(template)&{
tmpl_cnt&=&1;&/*&the&first&entry&is&the&time&*/
tmpl_len&=&strlen(template);
for(i=0;i&=tmpl_len&;i++)&{
&&&&if&(template[i]&==&':'&||&template[i]&==&'')&{
template[i]&=&'';
if&(tmpl_cnt&rrd.stat_head-&ds_cnt){
&&&&rrd_set_error(&Template&contains&more&DS&definitions&than&RRD&);
&&&&free(updvals);&free(pdp_temp);
&&&&free(tmpl_idx);&rrd_free(&rrd);
&&&&fclose(rrd_file);&return(-1);
if&((tmpl_idx[tmpl_cnt++]&=&ds_match(&rrd,dsname))&==&-1){
&&&&rrd_set_error(&unknown&DS&name&'%s'&,dsname);
&&&&free(updvals);&free(pdp_temp);
&&&&free(tmpl_idx);&rrd_free(&rrd);
&&&&fclose(rrd_file);&return(-1);
&&/*&the&first&element&is&always&the&time&*/
&&tmpl_idx[tmpl_cnt-1]++;&
&&/*&go&to&the&next&entry&on&the&template&*/
&&dsname&=&&template[i+1];
&&&&&&&&&&&&&&&&&&/*&fix&the&damage&we&did&before&*/
&&&&&&&&&&&&&&&&&&if&(i&tmpl_len)&{
&&&&&&&&&&&&&&&&&&&&&template[i]=':';
&&&&&&&&&&&&&&&&&&}&
&&&&} &&&&
&&&&if&((pdp_new&=&malloc(sizeof(rrd_value_t)
&&*rrd.stat_head-&ds_cnt))==NULL){
rrd_set_error(&allocating&pdp_new&...&);
free(updvals);
free(pdp_temp);
free(tmpl_idx);
rrd_free(&rrd);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&/*&loop&through&the&arguments.&*/
&&&&for(arg_i=optind+1;&arg_i&arg_i++)&{
char&*stepper&=&malloc((strlen(argv[arg_i])+1)*sizeof(char));
&&&&&&&&char&*step_start&=&
&&&&&&&&if&(stepper&==&NULL){
&&&&&&&&&&&&&&&&rrd_set_error(&failed&duplication&argv&entry&);
&&&&&&&&&&&&&&&&free(updvals);
&&&&&&&&&&&&&&&&free(pdp_temp);&&
&&&&&&&&&&&&&&&&free(tmpl_idx);
&&&&&&&&&&&&&&&&rrd_free(&rrd);
&&&&&&&&&&&&&&&&fclose(rrd_file);
&&&&&&&&&&&&&&&&return(-1);
&&&&&&&&&}
/*&initialize&all&ds&input&to&unknown&except&the&first&one
&&&&&&&&&&&which&has&always&got&to&be&set&*/
for(ii=1;ii&=rrd.stat_head-&ds_ii++)&updvals[ii]&=&&U&;
strcpy(stepper,argv[arg_i]);
updvals[0]=
while&(*stepper)&{
&&&&if&(*stepper&==&':')&{
*stepper&=&'';
if&(ii&tmpl_cnt){
&&&&updvals[tmpl_idx[ii]]&=&stepper+1;
&&&&stepper++;
if&(ii&!=&tmpl_cnt-1)&{
&&&&rrd_set_error(&expected&%lu&data&source&readings&(got&%lu)&from&%s:...&,
&&tmpl_cnt-1,&ii,&argv[arg_i]);
&&&&free(step_start);
&&&&&&&&/*&get&the&time&from&the&reading&...&handle&N&*/
if&(strcmp(updvals[0],&N&)==0){
&&&&current_time&=&time(NULL);
&&&&&&&&&&&&errno&=&0;
&&&&current_time&=&strtol(updvals[0],&endptr,10);
&&&&&&&&&&&&if&(errno&&&0){
&&&&&&&&&&&&&&&&rrd_set_error(&converting&&'%s'&to&long:&%s&,updvals[0],strerror(errno));
&&&&&&&&&&&&&&&&free(step_start);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&};
&&&&&&&&&&&&if&(endptr[0]&!=&''){
&&&&&&&&&&&&&&&&rrd_set_error(&conversion&of&'%s'&to&long&not&complete:&tail&'%s'&,updvals[0],endptr);
&&&&&&&&&&&&&&&&free(step_start);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
if(current_time&&=&rrd.live_head-&last_up){
&&&&rrd_set_error(&illegal&attempt&to&update&using&time&%ld&when&&
&&&last&update&time&is&%ld&(minimum&one&second&step)&,
&&current_time,&rrd.live_head-&last_up);
&&&&free(step_start);
/*&seek&to&the&beginning&of&the&rrd's&*/
if&(rra_current&!=&rra_begin)&{
&&&&if(fseek(rrd_file,&rra_begin,&SEEK_SET)&!=&0)&{
rrd_set_error(&seek&error&in&rrd&);
free(step_start);
&&&&rra_current&=&rra_
rra_start&=&rra_
/*&when&was&the&current&pdp&started&*/
proc_pdp_age&=&rrd.live_head-&last_up&%&rrd.stat_head-&pdp_
proc_pdp_st&=&rrd.live_head-&last_up&-&proc_pdp_
/*&when&did&the&last&pdp_st&occur&*/
occu_pdp_age&=&current_time&%&rrd.stat_head-&pdp_
occu_pdp_st&=&current_time&-&occu_pdp_
interval&=&current_time&-&rrd.live_head-&last_
if&(occu_pdp_st&&&proc_pdp_st){
&&&&/*&OK&we&passed&the&pdp_st&moment*/
&&&&pre_int&=&&occu_pdp_st&-&rrd.live_head-&last_&/*&how&much&of&the&input&data
&&&&&&*&occurred&before&the&latest
&&&&&&*&pdp_st&moment*/
&&&&post_int&=&occu_pdp_
&&&&&/*&how&much&after&it&*/
&&&&pre_int&=&
&&&&post_int&=&0;
#ifdef&DEBUG
&&&&&&&&proc_pdp_age&%lut&
&&&&&&&&proc_pdp_st&%lut&&
&&&&&&&&occu_pfp_age&%lut&&
&&&&&&&&occu_pdp_st&%lut&
&&&&&&&&int&%lut&
&&&&&&&&pre_int&%lut&
&&&&&&&&post_int&%lun&,&proc_pdp_age,&proc_pdp_st,&
occu_pdp_age,&occu_pdp_st,
&&&&&&&interval,&pre_int,&post_int);
/*&process&the&data&sources&and&update&the&pdp_prep&
&*&area&accordingly&*/
for(i=0;i&rrd.stat_head-&ds_i++){
&&&&enum&dst_en&dst_
&&&&dst_idx=&dst_conv(rrd.ds_def[i].dst);
&&&&if((updvals[i+1][0]&!=&'U')&&&
&&&&&&&rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt&&=&interval)&{
&&&&&&&double&rate&=&DNAN;
&&&&&&&/*&the&data&source&type&defines&how&to&process&the&data&*/
/*&pdp_temp&contains&rate&*&time&...&e.g.&the&bytes
&*&transferred&during&the&interval.&Doing&it&this&way&saves
&*&a&lot&of&math&operations&*/
switch(dst_idx){
case&DST_COUNTER:
case&DST_DERIVE:
&&&&if(rrd.pdp_prep[i].last_ds[0]&!=&'U'){
&&&&&&&for(ii=0;updvals[i+1][ii]&!=&'';ii++){
&&&&&&&&&&&&if(updvals[i+1][ii]&&&'0'&||&updvals[i+1][ii]&&&'9'&||&(ii==0&&&&(updvals[i+1][ii]&==&'-'&||&updvals[i+1][ii]&==&'+'))){
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&rrd_set_error(&not&a&simple&integer:&'%s'&,updvals[i+1]);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&& &&&&&&&if&(rrd_test_error()){
&&&&&&&& &&&&
&&&&&&&& &&&&&&&}
&&&&&&&pdp_new[i]=&rrd_diff(updvals[i+1],rrd.pdp_prep[i].last_ds);
&&&&&&&if(dst_idx&==&DST_COUNTER)&{
&&/*&simple&overflow&catcher&suggested&by&andres&Kroonmaa&*/
&&/*&this&will&fail&terribly&for&non&32&or&64&bit&counters&...&*/
&&/*&are&there&any&others&in&SNMP&land&?&*/
&&if&(pdp_new[i]&&&(double)0.0&)&
&&&&pdp_new[i]&+=&(double).0&;&&/*&2^32&*/
&&if&(pdp_new[i]&&&(double)0.0&)&
&&&&pdp_new[i]&+=&(double);&/*&2^64-2^32&*/;
&&&&&&&rate&=&pdp_new[i]&/&
&&&&&pdp_new[i]=&DNAN;
case&DST_ABSOLUTE:
&&&&&&&&&&&&&&&&&&&&errno&=&0;
&&&&&&&&&&&&pdp_new[i]&=&strtod(updvals[i+1],&endptr);
&&&&&&&&&&&&&&&&&&&&if&(errno&&&0){
&&&&&&&&&&&&&&&&&&&&&&&&rrd_set_error(&converting&&'%s'&to&float:&%s&,updvals[i+1],strerror(errno));
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&};
&&&&&&&&&&&&&&&&&&&&if&(endptr[0]&!=&''){
&&&&&&&&&&&&&&&&&&&&&&&&rrd_set_error(&conversion&of&'%s'&to&float&not&complete:&tail&'%s'&,updvals[i+1],endptr);
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&}
&&&&rate&=&pdp_new[i]&/&
case&DST_GAUGE:
&&&&&&&&&&&&&&&&&&&&errno&=&0;
&&&&pdp_new[i]&=&strtod(updvals[i+1],&endptr)&*&
&&&&&&&&&&&&&&&&&&&&if&(errno&&&0){
&&&&&&&&&&&&&&&&&&&&&&&&rrd_set_error(&converting&&'%s'&to&float:&%s&,updvals[i+1],strerror(errno));
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&};
&&&&&&&&&&&&&&&&&&&&if&(endptr[0]&!=&''){
&&&&&&&&&&&&&&&&&&&&&&&&rrd_set_error(&conversion&of&'%s'&to&float&not&complete:&tail&'%s'&,updvals[i+1],endptr);
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&}
&&&&rate&=&pdp_new[i]&/&
&&&&rrd_set_error(&rrd&contains&unknown&DS&type&:&'%s'&,
&&rrd.ds_def[i].dst);
/*&break&out&of&this&for&loop&if&the&error&string&is&set&*/
if&(rrd_test_error()){
&&&&&&&/*&make&sure&pdp_temp&is&neither&too&large&or&too&small
*&if&any&of&these&occur&it&becomes&unknown&...
*&sorry&folks&...&*/
&&&&&&&if&(&!&isnan(rate)&&&&
&&&&&&&&&&&&((&!&isnan(rrd.ds_def[i].par[DS_max_val].u_val)&&&
&&&&&&&&&&&&&&&&&rate&&&rrd.ds_def[i].par[DS_max_val].u_val&)&||&&&&&
&&&&&&&&&&&&(&!&isnan(rrd.ds_def[i].par[DS_min_val].u_val)&&&
&&&&&&&&&&&&&&&&rate&&&rrd.ds_def[i].par[DS_min_val].u_val&))){
&&pdp_new[i]&=&DNAN;
&&&&&&&} &&&&&&&
&&&&}&else&{
/*&no&news&is&news&all&the&same&*/
pdp_new[i]&=&DNAN;
&&&&/*&make&a&copy&of&the&command&line&argument&for&the&next&run&*/
#ifdef&DEBUG
&&&&fprintf(stderr,
&&&&&prep&ds[%lu]t&
&&&&&last_arg&'%s't&
&&&&&this_arg&'%s't&
&&&&&pdp_new&%10.2fn&,
&&&&rrd.pdp_prep[i].last_ds,
&&&&updvals[i+1],&pdp_new[i]);
&&&&if(dst_idx&==&DST_COUNTER&||&dst_idx&==&DST_DERIVE){
strncpy(rrd.pdp_prep[i].last_ds,
updvals[i+1],LAST_DS_LEN-1);
rrd.pdp_prep[i].last_ds[LAST_DS_LEN-1]='';
/*&break&out&of&the&argument&parsing&loop&if&the&error_string&is&set&*/
if&(rrd_test_error()){
&&&&free(step_start);
/*&has&a&pdp_st&moment&occurred&since&the&last&run&?&*/
if&(proc_pdp_st&==&occu_pdp_st){
&&&&/*&no&we&have&not&passed&a&pdp_st&moment.&therefore&update&is&simple&*/
&&&&for(i=0;i&rrd.stat_head-&ds_i++){
if(isnan(pdp_new[i]))
&&&&rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt&+=&
&&&&rrd.pdp_prep[i].scratch[PDP_val].u_val+=&pdp_new[i];
#ifdef&DEBUG
fprintf(stderr,
&NO&PDP&&ds[%lu]t&
&value&%10.2ft&
&unkn_sec&%5lun&,
rrd.pdp_prep[i].scratch[PDP_val].u_val,
rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt);
&&&&/*&an&pdp_st&has&occurred.&*/
&&&&/*&in&pdp_prep[].scratch[PDP_val].u_val&we&have&collected&rate*seconds&which&
&&&&&*&occurred&up&to&the&last&run.& &&&
&&&&pdp_new[]&contains&rate*seconds&from&the&latest&run.
&&&&pdp_temp[]&will&contain&the&rate&for&cdp&*/
&&&&for(i=0;i&rrd.stat_head-&ds_i++){
/*&update&pdp_prep&to&the&current&pdp_st&*/
if(isnan(pdp_new[i]))
&&&&rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt&+=&pre_
&&&&rrd.pdp_prep[i].scratch[PDP_val].u_val&+=&
pdp_new[i]/(double)interval*(double)pre_
/*&if&too&much&of&the&pdp_prep&is&unknown&we&dump&it&*/
if&((rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt&
&&&&&&&rrd.ds_def[i].par[DS_mrhb_cnt].u_cnt)&||
&&&&(occu_pdp_st-proc_pdp_st&&=&
&&&&&rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt))&{
&&&&pdp_temp[i]&=&DNAN;
&&&&pdp_temp[i]&=&rrd.pdp_prep[i].scratch[PDP_val].u_val
/&(double)(&occu_pdp_st
&&&-&proc_pdp_st
&&&-&rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt);
/*&make&pdp_prep&ready&for&the&next&run&*/
if(isnan(pdp_new[i])){
&&&&rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt&=&post_
&&&&rrd.pdp_prep[i].scratch[PDP_val].u_val&=&0.0;
&&&&rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt&=&0;
&&&&rrd.pdp_prep[i].scratch[PDP_val].u_val&=&
pdp_new[i]/(double)interval*(double)post_
#ifdef&DEBUG
fprintf(stderr,
&PDP&UPD&ds[%lu]t&
&pdp_temp&%10.2ft&
&new_prep&%10.2ft&
&new_unkn_sec&%5lun&,
i,&pdp_temp[i],
rrd.pdp_prep[i].scratch[PDP_val].u_val,
rrd.pdp_prep[i].scratch[PDP_unkn_sec_cnt].u_cnt);
&&&&/*&now&we&have&to&integrate&this&data&into&the&cdp_prep&areas&*/
&&&&/*&going&through&the&round&robin&archives&*/
&&&&for(i&=&0;
i&&&rrd.stat_head-&rra_
enum&cf_en&current_cf&=&cf_conv(rrd.rra_def[i].cf_nam);
/*&going&through&all&pdp_st&moments&which&have&occurred&
&*&since&the&last&run&*/
for(pdp_st&&=&proc_pdp_st+rrd.stat_head-&pdp_&
&&&&pdp_st&&=&occu_pdp_&
&&&&pdp_st&+=&rrd.stat_head-&pdp_step){
#ifdef&DEBUG
&&&&fprintf(stderr,&RRA&%lu&STEP&%lun&,i,pdp_st);
&&&&if((pdp_st&%
(rrd.rra_def[i].pdp_cnt*rrd.stat_head-&pdp_step))&==&0){
/*&later&on&the&cdp_prep&values&will&be&transferred&to
&*&the&rra.&&we&want&to&be&in&the&right&place.&*/
rrd.rra_ptr[i].cur_row++;
if&(rrd.rra_ptr[i].cur_row&&=&rrd.rra_def[i].row_cnt)
&&&&/*&oops&...&we&have&to&wrap&the&beast&...&*/
&&&&rrd.rra_ptr[i].cur_row=0;
#ifdef&DEBUG
fprintf(stderr,&&&--&RRA&Preseek&%ldn&,ftell(rrd_file));
/*&determine&if&a&seek&is&even&needed.&*/
rra_pos_tmp&=&rra_start&+
rrd.stat_head-&ds_cnt*rrd.rra_ptr[i].cur_row*sizeof(rrd_value_t);
if(rra_pos_tmp&!=&rra_current)&{
&&&&if(fseek(rrd_file,&rra_pos_tmp,&SEEK_SET)&!=&0){
rrd_set_error(&seek&error&in&rrd&);
&&&&rra_current&=&rra_pos_
#ifdef&DEBUG
fprintf(stderr,&&&--&RRA&Postseek&%ldn&,ftell(rrd_file));
&&&&for(ii&=&0;
ii&&&rrd.stat_head-&ds_
iii=i*rrd.stat_head-&ds_cnt+
/*&the&contents&of&cdp_prep[].scratch[CDP_val].u_val&depends
&*&on&the&consolidation&function&!&*/
if&(isnan(pdp_temp[ii])){&&&&/*&pdp&is&unknown&*/
&&&&rrd.cdp_prep[iii].scratch[CDP_unkn_pdp_cnt].u_cnt++;
#ifdef&DEBUG
&&&&fprintf(stderr,&&&**&UNKNOWN&ADD&%lun&,
&&&&rrd.cdp_prep[iii].scratch[CDP_unkn_pdp_cnt].u_cnt);
&&&&if&(isnan(rrd.cdp_prep[iii].scratch[CDP_val].u_val)){
/*&cdp_prep&is&unknown&when&it&does&not
&*&yet&contain&data.&It&can&not&be&zero&for
&*&things&like&mim&and&max&consolidation
&*&functions&*/
#ifdef&DEBUG
fprintf(stderr,&&&**&INIT&CDP&%en&,&pdp_temp[ii]);
rrd.cdp_prep[iii].scratch[CDP_val].u_val&=&pdp_temp[ii];
&&&&else&{
switch&(current_cf){
&&&&case&CF_AVERAGE:
rrd.cdp_prep[iii].scratch[CDP_val].u_val+=pdp_temp[ii];
#ifdef&DEBUG
fprintf(stderr,&&&**&AVERAGE&%en&,&
rrd.cdp_prep[iii].scratch[CDP_val].u_val);
&&&&case&CF_MINIMUM:
if&(pdp_temp[ii]&&&rrd.cdp_prep[iii].scratch[CDP_val].u_val)
&&&&rrd.cdp_prep[iii].scratch[CDP_val].u_val&=&pdp_temp[ii];
#ifdef&DEBUG
fprintf(stderr,&&&**&MINIMUM&%en&,&
rrd.cdp_prep[iii].scratch[CDP_val].u_val);
&&&&case&CF_MAXIMUM:
if&(pdp_temp[ii]&&&rrd.cdp_prep[iii].scratch[CDP_val].u_val)
&&&&rrd.cdp_prep[iii].scratch[CDP_val].u_val&=&pdp_temp[ii];
#ifdef&DEBUG
fprintf(stderr,&&&**&MAXIMUM&%en&,&
rrd.cdp_prep[iii].scratch[CDP_val].u_val);
&&&&case&CF_LAST:
rrd.cdp_prep[iii].scratch[CDP_val].u_val=pdp_temp[ii];
#ifdef&DEBUG
fprintf(stderr,&&&**&LAST&%en&,&
rrd.cdp_prep[iii].scratch[CDP_val].u_val);
&&&&default:
rrd_set_error(&Unknown&cf&%s&,
&&&&&&rrd.rra_def[i].cf_nam);
/*&is&the&data&in&the&cdp_prep&ready&to&go&into
&*&its&rra&?&*/
if((pdp_st&%&
&&&&(rrd.rra_def[i].pdp_cnt*rrd.stat_head-&pdp_step))&==&0){
&&&&/*&prepare&cdp_pref&for&its&transition&to&the&rra.&*/
&&&&if&(rrd.cdp_prep[iii].scratch[CDP_unkn_pdp_cnt].u_cnt&
&&rrd.rra_def[i].pdp_cnt*
rrd.rra_def[i].par[RRA_cdp_xff_val].u_val)
/*&to&much&of&the&cdp_prep&is&unknown&...&*/
rrd.cdp_prep[iii].scratch[CDP_val].u_val&=&DNAN;
&&&&else&if&(current_cf&==&CF_AVERAGE){
/*&for&a&real&average&we&have&to&divide
&*&the&sum&we&built&earlier&on.&While&ignoring
&*&the&unknown&pdps&*/
rrd.cdp_prep[iii].scratch[CDP_val].u_val&
/=&(rrd.rra_def[i].pdp_cnt
&&&&-rrd.cdp_prep[iii].scratch[CDP_unkn_pdp_cnt].u_cnt);
&&&&/*&we&can&write&straight&away,&because&we&are
&&&&&*&already&in&the&right&place&...&*/
#ifdef&DEBUG
&&&&fprintf(stderr,&&&--&RRA&WRITE&VALUE&%e,&at&%ldn&,
&&&&rrd.cdp_prep[iii].scratch[CDP_val].u_val,ftell(rrd_file));
&&&&if(fwrite(&(rrd.cdp_prep[iii].scratch[CDP_val].u_val),
&&&&&&sizeof(rrd_value_t),1,rrd_file)&!=&1){
rrd_set_error(&writing&rrd&);
&&&&rra_current&+=&sizeof(rrd_value_t);
&&&&wrote_to_file&=&1;
#ifdef&DEBUG
&&&&fprintf(stderr,&&&--&RRA&WROTE&new&at&%ldn&,ftell(rrd_file));
&&&&/*&make&cdp_prep&ready&for&the&next&run&*/
&&&&rrd.cdp_prep[iii].scratch[CDP_val].u_val&=&DNAN;
&&&&rrd.cdp_prep[iii].scratch[CDP_unkn_pdp_cnt].u_cnt&=&0;
&&&&/*&break&out&of&this&loop&if&error_string&has&been&set&*/
&&&&if&(rrd_test_error())
/*&break&out&of&this&loop&if&error_string&has&been&set&*/
if&(rrd_test_error())
/*&to&be&able&to&position&correctly&in&the&next&rra&w&move
&*&the&rra_start&pointer&on&to&the&next&rra&*/
rra_start&+=&rrd.rra_def[i].row_cnt
*rrd.stat_head-&ds_cnt*sizeof(rrd_value_t);
&&&&/*&break&out&of&the&argument&parsing&loop&if&error_string&is&set&*/
&&&&if&(rrd_test_error()){
free(step_start);
rrd.live_head-&last_up&=&current_
free(step_start);
&&&&/*&if&we&got&here&and&if&there&is&an&error&and&if&the&file&has&not&been
&&&&&*&written&to,&then&close&things&up&and&return.&*/
&&&&if&(rrd_test_error())&{
free(updvals);
free(tmpl_idx);
rrd_free(&rrd);
free(pdp_temp);
free(pdp_new);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&/*&aargh&...&that&was&tough&...&so&many&loops&...&anyway,&its&done.
&&&&&*&we&just&need&to&write&back&the&live&header&portion&now*/
&&&&if&(fseek(rrd_file,&(sizeof(stat_head_t)
&+&sizeof(ds_def_t)*rrd.stat_head-&ds_cnt&
&+&sizeof(rra_def_t)*rrd.stat_head-&rra_cnt),
&&&&&&SEEK_SET)&!=&0)&{
rrd_set_error(&seek&rrd&for&live&header&writeback&);
free(updvals);
free(tmpl_idx);
rrd_free(&rrd);
free(pdp_temp);
free(pdp_new);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&if(fwrite(&rrd.live_head,
&&&&&&&sizeof(live_head_t),&1,&rrd_file)&!=&1){
rrd_set_error(&fwrite&live_head&to&rrd&);
free(updvals);
rrd_free(&rrd);
free(tmpl_idx);
free(pdp_temp);
free(pdp_new);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&if(fwrite(&rrd.pdp_prep,
&&&&&&&sizeof(pdp_prep_t),
&&&&&&&rrd.stat_head-&ds_cnt,&rrd_file)&!=&rrd.stat_head-&ds_cnt){
rrd_set_error(&ftwrite&pdp_prep&to&rrd&);
free(updvals);
rrd_free(&rrd);
free(tmpl_idx);
free(pdp_temp);
free(pdp_new);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&if(fwrite(&rrd.cdp_prep,
&&&&&&&sizeof(cdp_prep_t),
&&&&&&&rrd.stat_head-&rra_cnt&*rrd.stat_head-&ds_cnt,&rrd_file)&
&&&&&&&!=&rrd.stat_head-&rra_cnt&*rrd.stat_head-&ds_cnt){
rrd_set_error(&ftwrite&cdp_prep&to&rrd&);
free(updvals);
free(tmpl_idx);
rrd_free(&rrd);
free(pdp_temp);
free(pdp_new);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&if(fwrite(&rrd.rra_ptr,
&&&&&&&sizeof(rra_ptr_t),&
&&&&&&&rrd.stat_head-&rra_cnt,rrd_file)&!=&rrd.stat_head-&rra_cnt){
rrd_set_error(&fwrite&rra_ptr&to&rrd&);
free(updvals);
free(tmpl_idx);
rrd_free(&rrd);
free(pdp_temp);
free(pdp_new);
&&&&&&&&fclose(rrd_file);
return(-1);
&&&&/*&OK&now&close&the&files&and&free&the&memory&*/
&&&&if(fclose(rrd_file)&!=&0){
rrd_set_error(&closing&rrd&);
free(updvals);
free(tmpl_idx);
rrd_free(&rrd);
free(pdp_temp);
free(pdp_new);
return(-1);
&&&&rrd_free(&rrd);
&&&&free(updvals);
&&&&free(tmpl_idx);
&&&&free(pdp_new);
&&&&free(pdp_temp);
&&&&return(0);
&*&get&exclusive&lock&to&whole&file.
&*&lock&gets&removed&when&we&close&the&file
&*&returns&0&on&success
LockRRD(FILE&*rrdfile)
&&&&int rrd_
/*&File&descriptor&for&RRD&*/
&&&&rrd_fd&=&fileno(rrdfile);
#ifndef&WIN32&&&&
struct&flock
&&&&lock.l_type&=&F_WRLCK;&&&&/*&exclusive&write&lock&*/
&&&&lock.l_len&=&0; &&&&&&/*&whole&file&*/
&&&&lock.l_start&=&0; &&&&&&/*&start&of&file&*/
&&&&lock.l_whence&=&SEEK_SET;&&&/*&end&of&file&*/
&&&&stat&=&fcntl(rrd_fd,&F_SETLK,&&lock);
struct&_stat&
if&(&_fstat(&rrd_fd,&&st&)&==&0&)&{
stat&=&_locking&(&rrd_fd,&_LK_NBLCK,&st.st_size&);
stat&=&-1;
&&&&return(stat);
CopyRight & 2008- All Rights reserved. 苏ICP备
号 京公网安备:95}

我要回帖

更多关于 安装vmware tools 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信