User story RICPLT-2620
[ric-app/admin.git] / src / protector-plugin / admission_policy.hpp
index afb5843..298352e 100644 (file)
 #pragma once
 #ifndef ADMISSION_CTRL
 #define ADMISSION_CTRL
+
+#include <rapidjson/document.h>
+#include <rapidjson/writer.h>
+#include <rapidjson/stringbuffer.h>
+#include <rapidjson/schema.h>
+
+#include <iostream>
+#include <vector>
 #include <map>
 #include <plugin-interface.hpp>
 #include <mdclog/mdclog.h>
 #include <chrono>
 #include <sstream>
 
+#define MAX_INSTANCES 10
+
 class admission: virtual public Policy
 {
 public:
-  admission(std::string, std::string, std::string, unsigned int, bool report_only=true);
+  admission(std::string, std::string, std::string, unsigned int, std::string, bool report_only=true);
   ~admission(void);
   protector * get_protector_instance(unsigned int);
   bool setPolicy(const char *, int , std::string & );
   bool getPolicy(const char * , int, std::string & );
   std::string getName(void);
-  int getMetrics(std::string & ) ;
-  
+  int getMetrics(std::vector<std::string> & ) ;
+  std::string get_error(void) const {return error_string;};
+  unsigned int get_num_policies(void) {return policy_table.size();};
 private:
   void storePolicy(void);
   void init_log(void);
   void setPolicyVars(void);
   void instantiate_protector_plugin(bool);
+  bool load_file(std::string, std::string &) ;
+  bool load_schema(const std::string & , const std::string & , std::unique_ptr<rapidjson::SchemaDocument> & , std::unique_ptr<rapidjson::SchemaValidator> &);
+  void process_counters(int , std::string & );
 
-  std::map<std::string, int> current_config;
-  std::map<std::string, int> prev_config;
   std::vector<protector> _plugin_instances;
+  std::map<std::string, int> policy_table;
+  std::map<std::string, rapidjson::Pointer> window_policy_vars;
+  std::map<std::string, rapidjson::Pointer> generic_policy_vars;
+  std::map<std::string, rapidjson::Pointer> metric_vars;
 
-  std::vector<TrieNode> policy_vars;
-  std::vector<TrieNode> set_policy_response;
-  std::vector<TrieNode> get_policy_response;
-  std::vector<TrieNode> metric_responses;
-  std::vector<TrieNode *> policy_pointer;
  
-  jsonHandler set_policy_req_obj;
-  jsonHandler set_policy_resp_obj;
-  
-  jsonHandler get_policy_req_obj;
-  jsonHandler get_policy_resp_obj;
-  
-  jsonHandler metrics_obj;
-
-  std::vector<int> prev_values;
-  std::vector<int> curr_values;
+  std::unique_ptr<rapidjson::SchemaDocument> downstream_schema_ref_, notify_schema_ref_, metrics_schema_ref_;
+  std::unique_ptr<rapidjson::SchemaValidator> downstream_validator_, notify_validator_, metrics_validator_;
+  rapidjson::Document notify_message_, metrics_message_;
 
+  std::string _xapp_id;
+  
+  // stores past count of requests, reject and time stamp
+  std::map<int, std::vector<long int>> counters;
+  std::string error_string;
   unsigned long int prev_time_stamp;
 };