option ceilometer_kind="ceilometer";
option ceilometer_publish_tenant_kind = "ceilo-publish-tenant";
option ceilometer_publish_tenant_os_kind = "ceilo-os-publish-tenant";
option ceilometer_publish_tenant_onos_kind = "ceilo-onos-publish-tenant";
option ceilometer_publish_tenant_user_kind = "ceilo-user-publish-tenant";

message CeilometerService (Service) {

}

message MonitoringChannel (Service) {

}


message MonitoringPublisher (Tenant) {

}

message OpenStackServiceMonitoringPublisher (MonitoringPublisher) {

}

message ONOSServiceMonitoringPublisher (MonitoringPublisher) {

}

message UserServiceMonitoringPublisher (MonitoringPublisher) {

}

message InfraMonitoringAgentInfo (ServiceMonitoringAgentInfo) {
     required manytoone monitoring_publisher->MonitoringPublisher:monitoring_agents = 1 [null = True, blank = True];
     required string start_url = 2 [help_text = "URL/API to be used to start monitoring agent", validators="URLValidator"];
     required string start_url_json_data = 3 [help_text = "Metadata to be passed along with start API"];
     required string stop_url = 4 [help_text = "URL/API to be used to stop monitoring agent", validators="URLValidator"];
}

message MonitoringCollectorPluginInfo (PlCoreBase) {
     required onetoone monitoring_publisher->MonitoringPublisher:monitoring_collector_plugin = 1 [null = True, blank = True];
     required string name = 2 [max_length=32];
     required string plugin_folder_path = 3 [blank=True, null=True, max_length=1024, help_text="Path pointing to plugin files. e.g. /opt/xos/synchronizers/monitoring/ceilometer/ceilometer-plugins/network/ext_services/vsg/"];
     required string plugin_rabbit_exchange = 4 [blank=True, null=True, max_length=100];
}

message SFlowService (Service) {

}

message SFlowTenant (Tenant) {

}
