# apollo-environment-detector
[](https://circleci.com/gh/apollographql/environment-detector/tree/main)
This library provides two functions for easily detecting a [`ComputeEnvironment`](https://docs.rs/apollo-environment-detector/0.1/apollo-environment-detector/enum.ComputeEnvironment.html) based on a
given weighted threshold.
```
[dependencies]
apollo-environment-detector = "0.1"
```
## Usage
```rust
use apollo_environment_detector::{detect, detect_one, MAX_INDIVIDUAL_WEIGHTING};
// Attempt to detect multiple environments based on a weighting.
let compute_envs = detect(MAX_INDIVIDUAL_WEIGHTING);
println!("{:?}", compute_envs);
// Attempt to detect a single environment based on a weighting.
let compute_env = detect_one(MAX_INDIVIDUAL_WEIGHTING);
println!("{:?}", compute_env);
```
### Detectors
The following environments are able to be detected:
- Amazon Elastic Compute Cloud (EC2)
- Amazon Elastic Container Service (ECS)
- AWS Lambda
- Kubernetes on AWS
- Nomad on AWS
- Azure Containers Apps
- Azure Container Apps Job
- Azure Container Instance
- Kubernetes on Azure
- Azure VM
- Nomad on Azure
- Google Cloud Run (Gen1)
- Google Cloud Run (Gen2)
- Google Cloud Run (Job)
- Google Compute Engine
- Kubernetes on Google Cloud
- Nomad on Google Cloud
- Kubernetes
- Nomad
- QEMU
This library currently supports 2 detection methods: [SMBIOS](https://en.wikipedia.org/wiki/System_Management_BIOS) and Environment Variables.
#### SMBIOS
There are currently 3 data points read during detection on both Linux and Windows:
- `bios_vendor`
- `product_name`
- `sys_vendor`
### Threshold Weighting
A detection threshold is represented in the form of a `u16`, which has a max of `65535` (`2^16-1`) as defined in `u16::MAX`.
As we supported multiple detectors, the maximum returned total weighting is `2^15` in order to avoid thresholding and overflows when using multiple detectors. This is exposed as a constant [`MAX_TOTAL_WEIGHTING`](https://docs.rs/apollo-environment-detector/0.1/apollo-environment-detector/constant.MAX_TOTAL_WEIGHTING.html).