00001
00010 #ifndef _metrics_H
00011 #define _metrics_H
00012
00013 #include <stdarg.h>
00014 #include "gridlabd.h"
00015
00016 EXPORT STATUS metrics_event_ended(OBJECT *obj, OBJECT *event_obj,OBJECT *fault_obj,OBJECT *faulting_obj,TIMESTAMP event_start_time,TIMESTAMP event_end_time,char *fault_type,char *impl_fault,int number_customers_int);
00017 EXPORT STATUS metrics_event_ended_secondary(OBJECT *obj, OBJECT *event_obj,OBJECT *fault_obj,OBJECT *faulting_obj,TIMESTAMP event_start_time,TIMESTAMP event_end_time,char *fault_type,char *impl_fault,int number_customers_int, int number_customers_int_secondary);
00018 EXPORT STATUS metrics_get_interrupted_count(OBJECT *obj,int *in_outage);
00019 EXPORT STATUS metrics_get_interrupted_count_secondary(OBJECT *obj,int *in_outage, int *in_outage_secondary);
00020
00021 typedef struct s_indices {
00022 char256 MetricName;
00023 gld_property *MetricLoc;
00024 gld_property *MetricLocInterval;
00025 } INDEXARRAY;
00026
00027 typedef struct s_custarray {
00028 OBJECT *CustomerObj;
00029 gld_property *CustInterrupted;
00030 gld_property *CustInterrupted_Secondary;
00031 } CUSTARRAY;
00032
00033 class metrics : public gld_object {
00034
00035 public:
00036 private:
00037 int num_indices;
00038 INDEXARRAY *CalcIndices;
00039 TIMESTAMP metric_interval;
00040 TIMESTAMP report_interval;
00041 TIMESTAMP next_metric_interval;
00042 TIMESTAMP next_report_interval;
00043 TIMESTAMP next_annual_interval;
00044 int metric_interval_event_count;
00045 int annual_interval_event_count;
00046 bool metric_equal_annual;
00047 int CustomerCount;
00048 CUSTARRAY *Customers;
00049 FUNCTIONADDR reset_interval_func;
00050 FUNCTIONADDR reset_annual_func;
00051 FUNCTIONADDR compute_metrics;
00052
00053 TIMESTAMP curr_time;
00054
00055 public:
00056 static bool report_event_log;
00057
00058 char report_file[1024];
00059 bool secondary_interruptions_count;
00060
00061
00062 metrics(MODULE *module);
00063 int create(void);
00064 int init(OBJECT *parent);
00065 TIMESTAMP postsync(TIMESTAMP t0, TIMESTAMP t1);
00066 char1024 customer_group;
00067 OBJECT *module_metrics_obj;
00068 char1024 metrics_oi;
00069 double metric_interval_dbl;
00070 double report_interval_dbl;
00071 void event_ended(OBJECT *event_obj,OBJECT *fault_obj,OBJECT *faulting_obj,TIMESTAMP event_start_time,TIMESTAMP event_end_time,char *fault_type,char *impl_fault,int number_customers_int);
00072 void event_ended_sec(OBJECT *event_obj,OBJECT *fault_obj,OBJECT *faulting_obj,TIMESTAMP event_start_time,TIMESTAMP event_end_time,char *fault_type,char *impl_fault,int number_customers_int, int number_customers_int_secondary);
00073 int get_interrupted_count(void);
00074 void get_interrupted_count_secondary(int *in_outage, int *in_outage_secondary);
00075 void write_metrics(void);
00076
00077 static CLASS *oclass;
00078 static metrics *defaults;
00079 };
00080
00081 #endif
00082