blob: 419d275e0b32817388120222bd433ee6f4835efd [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <gtest/gtest.h>
#include <process/future.hpp>
#include <process/http.hpp>
#include <process/pid.hpp>
#include <stout/gtest.hpp>
#include <stout/try.hpp>
#include "master/master.hpp"
#include "tests/mesos.hpp"
using mesos::internal::master::Master;
using mesos::internal::slave::Slave;
namespace mesos {
namespace internal {
namespace tests {
class MetricsTest : public mesos::internal::tests::MesosTest {};
TEST_F(MetricsTest, Master)
{
Try<process::PID<Master>> master = StartMaster();
ASSERT_SOME(master);
// Get the snapshot.
process::UPID upid("metrics", process::address());
process::Future<process::http::Response> response =
process::http::get(upid, "snapshot");
AWAIT_EXPECT_RESPONSE_STATUS_EQ(process::http::OK().status, response);
AWAIT_EXPECT_RESPONSE_HEADER_EQ(APPLICATION_JSON, "Content-Type", response);
Try<JSON::Object> parse = JSON::parse<JSON::Object>(response.get().body);
ASSERT_SOME(parse);
JSON::Object stats = parse.get();
EXPECT_EQ(1u, stats.values.count("master/uptime_secs"));
EXPECT_EQ(1u, stats.values.count("master/elected"));
EXPECT_EQ(1u, stats.values.count("master/slaves_connected"));
EXPECT_EQ(1u, stats.values.count("master/slaves_disconnected"));
EXPECT_EQ(1u, stats.values.count("master/slaves_active"));
EXPECT_EQ(1u, stats.values.count("master/slaves_inactive"));
EXPECT_EQ(1u, stats.values.count("master/frameworks_connected"));
EXPECT_EQ(1u, stats.values.count("master/frameworks_disconnected"));
EXPECT_EQ(1u, stats.values.count("master/frameworks_active"));
EXPECT_EQ(1u, stats.values.count("master/frameworks_inactive"));
EXPECT_EQ(1u, stats.values.count("master/outstanding_offers"));
EXPECT_EQ(1u, stats.values.count("master/tasks_staging"));
EXPECT_EQ(1u, stats.values.count("master/tasks_starting"));
EXPECT_EQ(1u, stats.values.count("master/tasks_running"));
EXPECT_EQ(1u, stats.values.count("master/tasks_killing"));
EXPECT_EQ(1u, stats.values.count("master/tasks_finished"));
EXPECT_EQ(1u, stats.values.count("master/tasks_failed"));
EXPECT_EQ(1u, stats.values.count("master/tasks_killed"));
EXPECT_EQ(1u, stats.values.count("master/tasks_lost"));
EXPECT_EQ(1u, stats.values.count("master/tasks_error"));
EXPECT_EQ(1u, stats.values.count("master/dropped_messages"));
// Messages from schedulers.
EXPECT_EQ(1u, stats.values.count("master/messages_register_framework"));
EXPECT_EQ(1u, stats.values.count("master/messages_reregister_framework"));
EXPECT_EQ(1u, stats.values.count("master/messages_unregister_framework"));
EXPECT_EQ(1u, stats.values.count("master/messages_deactivate_framework"));
EXPECT_EQ(1u, stats.values.count("master/messages_kill_task"));
EXPECT_EQ(1u, stats.values.count(
"master/messages_status_update_acknowledgement"));
EXPECT_EQ(1u, stats.values.count("master/messages_resource_request"));
EXPECT_EQ(1u, stats.values.count("master/messages_launch_tasks"));
EXPECT_EQ(1u, stats.values.count("master/messages_decline_offers"));
EXPECT_EQ(1u, stats.values.count("master/messages_revive_offers"));
EXPECT_EQ(1u, stats.values.count("master/messages_suppress_offers"));
EXPECT_EQ(1u, stats.values.count("master/messages_reconcile_tasks"));
EXPECT_EQ(1u, stats.values.count("master/messages_framework_to_executor"));
// Messages from slaves.
EXPECT_EQ(1u, stats.values.count("master/messages_register_slave"));
EXPECT_EQ(1u, stats.values.count("master/messages_reregister_slave"));
EXPECT_EQ(1u, stats.values.count("master/messages_unregister_slave"));
EXPECT_EQ(1u, stats.values.count("master/messages_status_update"));
EXPECT_EQ(1u, stats.values.count("master/messages_exited_executor"));
// Messages from both schedulers and slaves.
EXPECT_EQ(1u, stats.values.count("master/messages_authenticate"));
EXPECT_EQ(1u, stats.values.count(
"master/valid_framework_to_executor_messages"));
EXPECT_EQ(1u, stats.values.count(
"master/invalid_framework_to_executor_messages"));
EXPECT_EQ(1u, stats.values.count("master/valid_status_updates"));
EXPECT_EQ(1u, stats.values.count("master/invalid_status_updates"));
EXPECT_EQ(1u, stats.values.count(
"master/valid_status_update_acknowledgements"));
EXPECT_EQ(1u, stats.values.count(
"master/invalid_status_update_acknowledgements"));
EXPECT_EQ(1u, stats.values.count("master/recovery_slave_removals"));
EXPECT_EQ(1u, stats.values.count("master/event_queue_messages"));
EXPECT_EQ(1u, stats.values.count("master/event_queue_dispatches"));
EXPECT_EQ(1u, stats.values.count("master/event_queue_http_requests"));
EXPECT_EQ(1u, stats.values.count("master/cpus_total"));
EXPECT_EQ(1u, stats.values.count("master/cpus_used"));
EXPECT_EQ(1u, stats.values.count("master/cpus_percent"));
EXPECT_EQ(1u, stats.values.count("master/mem_total"));
EXPECT_EQ(1u, stats.values.count("master/mem_used"));
EXPECT_EQ(1u, stats.values.count("master/mem_percent"));
EXPECT_EQ(1u, stats.values.count("master/disk_total"));
EXPECT_EQ(1u, stats.values.count("master/disk_used"));
EXPECT_EQ(1u, stats.values.count("master/disk_percent"));
EXPECT_EQ(1u, stats.values.count("registrar/queued_operations"));
EXPECT_EQ(1u, stats.values.count("registrar/registry_size_bytes"));
EXPECT_EQ(1u, stats.values.count("registrar/state_fetch_ms"));
EXPECT_EQ(1u, stats.values.count("registrar/state_store_ms"));
}
TEST_F(MetricsTest, Slave)
{
// TODO(dhamon): https://issues.apache.org/jira/browse/MESOS-2134 to allow
// only a Slave to be started.
Try<process::PID<Master>> master = StartMaster();
ASSERT_SOME(master);
Try<process::PID<Slave>> slave = StartSlave();
ASSERT_SOME(slave);
// Get the snapshot.
process::UPID upid("metrics", process::address());
process::Future<process::http::Response> response =
process::http::get(upid, "snapshot");
AWAIT_EXPECT_RESPONSE_STATUS_EQ(process::http::OK().status, response);
AWAIT_EXPECT_RESPONSE_HEADER_EQ(APPLICATION_JSON, "Content-Type", response);
Try<JSON::Object> parse = JSON::parse<JSON::Object>(response.get().body);
ASSERT_SOME(parse);
JSON::Object stats = parse.get();
EXPECT_EQ(1u, stats.values.count("slave/uptime_secs"));
EXPECT_EQ(1u, stats.values.count("slave/registered"));
EXPECT_EQ(1u, stats.values.count("slave/recovery_errors"));
EXPECT_EQ(1u, stats.values.count("slave/frameworks_active"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_staging"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_starting"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_running"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_killing"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_finished"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_failed"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_killed"));
EXPECT_EQ(1u, stats.values.count("slave/tasks_lost"));
EXPECT_EQ(1u, stats.values.count("slave/executors_registering"));
EXPECT_EQ(1u, stats.values.count("slave/executors_running"));
EXPECT_EQ(1u, stats.values.count("slave/executors_terminating"));
EXPECT_EQ(1u, stats.values.count("slave/executors_terminated"));
EXPECT_EQ(1u, stats.values.count("slave/valid_status_updates"));
EXPECT_EQ(1u, stats.values.count("slave/invalid_status_updates"));
EXPECT_EQ(1u, stats.values.count("slave/valid_framework_messages"));
EXPECT_EQ(1u, stats.values.count("slave/invalid_framework_messages"));
EXPECT_EQ(1u, stats.values.count("slave/container_launch_errors"));
EXPECT_EQ(1u, stats.values.count("slave/cpus_total"));
EXPECT_EQ(1u, stats.values.count("slave/cpus_used"));
EXPECT_EQ(1u, stats.values.count("slave/cpus_percent"));
EXPECT_EQ(1u, stats.values.count("slave/mem_total"));
EXPECT_EQ(1u, stats.values.count("slave/mem_used"));
EXPECT_EQ(1u, stats.values.count("slave/mem_percent"));
EXPECT_EQ(1u, stats.values.count("slave/disk_total"));
EXPECT_EQ(1u, stats.values.count("slave/disk_used"));
EXPECT_EQ(1u, stats.values.count("slave/disk_percent"));
}
} // namespace tests {
} // namespace internal {
} // namespace mesos {