# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. Licensed under the Elastic License; # you may not use this file except in compliance with the Elastic License. require "spec_helper" shared_examples "record monitoring data to es" do let(:max_retry) { 10 } let(:schemas_path) { File.join(File.dirname(__FILE__), "..", "..", "..", "spec", "monitoring", "schemas") } let(:retryable_errors) do [NoMethodError, RSpec::Expectations::ExpectationNotMetError, Elasticsearch::Transport::Transport::Errors::ServiceUnavailable, Elasticsearch::Transport::Transport::Errors::NotFound] end describe "metrics" do let(:schema_file) { File.join(schemas_path, "monitoring_document_schema.json") } it "records metrics on es" do Stud.try(max_retry.times, retryable_errors) do elasticsearch_client.indices.refresh api_response = elasticsearch_client.search :index => MONITORING_INDEXES, :body => {:query => {:term => {"type" => "logstash_stats"}}} expect(api_response["hits"]["total"]["value"]).to be > 0 api_response["hits"]["hits"].each do |full_document| document = full_document["_source"]["logstash_stats"] expect(JSON::Validator.fully_validate(schema_file, document)).to be_empty end end end end describe "state" do let(:schema_file) { File.join(schemas_path, "states_document_schema.json") } it "records state on es" do Stud.try(max_retry.times, retryable_errors) do elasticsearch_client.indices.refresh api_response = elasticsearch_client.search :index => MONITORING_INDEXES, :body => {:query => {:term => {"type" => "logstash_state"}}} expect(api_response["hits"]["total"]["value"]).to be > 0 api_response["hits"]["hits"].each do |full_document| document = full_document["_source"]["logstash_state"] expect(JSON::Validator.fully_validate(schema_file, document)).to be_empty end end end end end