blob: fd77ac782f743688c0a00eb3fb7a8bcf18433513 [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.
*
*/
package org.apache.skywalking.oap.server.core.analysis;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* Layer represents an abstract framework in computer science, such as Operating System(OS_LINUX layer), Kubernetes(k8s
* layer). This kind of layer would be owners of different services detected from different technology.
*/
public enum Layer {
/**
* Default Layer if the layer is not defined
*/
UNDEFINED(0, false),
/**
* Envoy Access Log Service
*/
MESH(1, true),
/**
* Agent-installed Service
*/
GENERAL(2, true),
/**
* Linux Machine
*/
OS_LINUX(3, true),
/**
* Kubernetes cluster
*/
K8S(4, true),
/**
* Function as a Service
*
* Deprecated since 9.7.0. OpenFunction relative features are not maintained anymore.
*/
@Deprecated
FAAS(5, true),
/**
* Mesh control plane, eg. Istio control plane
*/
MESH_CP(6, true),
/**
* Mesh data plane, eg. Envoy
*/
MESH_DP(7, true),
/**
* Telemetry from real database
*/
DATABASE(8, true),
/**
* Cache service eg. ehcache, guava-cache, memcache
*/
CACHE(9, true),
/**
* Telemetry from the Browser eg. Apache SkyWalking Client JS
*/
BROWSER(10, true),
/**
* Self Observability of OAP
*/
SO11Y_OAP(11, true),
/**
* Self Observability of Satellite
*/
SO11Y_SATELLITE(12, true),
/**
* Telemetry from the real MQ
*/
MQ(13, true),
/**
* Database conjectured by client side plugin
*/
VIRTUAL_DATABASE(14, false),
/**
* MQ conjectured by client side plugin
*/
VIRTUAL_MQ(15, false),
/**
* The uninstrumented gateways configured in OAP
*/
VIRTUAL_GATEWAY(16, false),
/**
* Kubernetes service
*/
K8S_SERVICE(17, true),
/**
* MySQL Server, also known as mysqld, is a single multithreaded program that does most of the work in a MySQL
* installation.
*/
MYSQL(18, true),
/**
* Cache conjectured by client side plugin(eg. skywalking-java -> JedisPlugin LettucePlugin)
*/
VIRTUAL_CACHE(19, false),
/**
* PostgreSQL is an advanced, enterprise-class, and open-source relational database system.
*/
POSTGRESQL(20, true),
/**
* Apache APISIX is an open source, dynamic, scalable, and high-performance cloud native API gateway.
*/
APISIX(21, true),
/**
* EKS (Amazon Elastic Kubernetes Service) is k8s service provided by AWS Cloud
*/
AWS_EKS(22, true),
/**
* Windows Machine
*/
OS_WINDOWS(23, true),
/**
* Amazon Simple Storage Service (Amazon S3) is an object storage service provided by AWS Cloud
*/
AWS_S3(24, true),
/**
* Amazon DynamoDB is a fully managed NoSQL database service that provides
* fast and predictable performance with seamless scalability.
*/
AWS_DYNAMODB(25, true),
/**
* Amazon API Gateway is an AWS service for creating, publishing, maintaining, monitoring, and securing REST, HTTP,
* and WebSocket APIs at any scale.
*/
AWS_GATEWAY(26, true),
/**
* Redis is an open source (BSD licensed), in-memory data structure store,
* used as a database, cache, and message broker.
*/
REDIS(27, true),
/**
* Elasticsearch is a distributed, open source search and analytics engine for all types of data,
* including textual, numerical, geospatial, structured, and unstructured.
*/
ELASTICSEARCH(28, true),
/**
* RabbitMQ is one of the most popular open source message brokers. RabbitMQ is lightweight and easy to deploy
* on premises and in the cloud. It supports multiple messaging protocols.
*/
RABBITMQ(29, true),
/**
* MongoDB is a document database. It stores data in a type of JSON format called BSON.
*/
MONGODB(30, true),
/**
* Kafka is a distributed streaming platform that is used publish and subscribe to streams of records.
*/
KAFKA(31, true),
/**
* Pulsar is a distributed pub-sub messaging platform that provides high-performance, durable messaging.
* It is used to publish and subscribe to streams of records.
* Pulsar supports scalable and fault-tolerant messaging, making it suitable for use in distributed systems.
*/
PULSAR(32, true),
/**
* A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads.
*/
BOOKKEEPER(33, true),
/**
* Nginx is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server.
*/
NGINX(34, true),
/**
* A cloud native messaging and streaming platform, making it simple to build event-driven applications.
*/
ROCKETMQ(35, true),
/**
* A high-performance, column-oriented SQL database management system (DBMS) for online analytical processing (OLAP).
*/
CLICKHOUSE(36, true),
/**
* ActiveMQ is a popular open source, multi-protocol, Java-based message broker.
*/
ACTIVEMQ(37, true);
private final int value;
/**
* The `normal` status represents this service is detected by an agent. The `un-normal` service is conjectured by
* telemetry data collected from agents on/in the `normal` service.
*/
private final boolean isNormal;
private static final Map<Integer, Layer> DICTIONARY = new HashMap<>();
private static final Map<String, Layer> DICTIONARY_NAME = new HashMap<>();
static {
Arrays.stream(Layer.values()).forEach(l -> {
DICTIONARY.put(l.value, l);
DICTIONARY_NAME.put(l.name(), l);
});
}
Layer(int value, boolean isNormal) {
this.value = value;
this.isNormal = isNormal;
}
public int value() {
return value;
}
public static Layer valueOf(int value) {
Layer layer = DICTIONARY.get(value);
if (layer == null) {
throw new UnexpectedException("Unknown Layer value");
}
return layer;
}
public static Layer nameOf(String name) {
Layer layer = DICTIONARY_NAME.get(name);
if (layer == null) {
return UNDEFINED;
}
return layer;
}
public boolean isNormal() {
return isNormal;
}
}