blob: 5cd012ad4434fe9d09d10dd4eef0b4c944ac8797 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# The declarations in this file build the Datadog agent's core
# integrations. These integrations are tracked in a separate
# repository[1] outside of the agent's primary repository and provide
# checks for various kinds of services.
#
# Not all services are relevant for all users, however. As some of
# them depend on various tools and Python packages it is nonsensical
# to build *all* integrations by default.
#
# A set of default integrations is defined and built either way.
# Additional integrations can be specified by overriding
# `extraIntegrations` in datadog-integrations-core.
#
# In practice the syntax for using this with additional integrations
# is not the most beautiful, but it works. For example to use
# datadog-agent from the top-level with the `ntp`-integration
# included, one could say:
#
# let
# integrationsWithNtp = datadog-integrations-core {
# # Extra integrations map from the integration name (as in the
# # integrations-core repository) to a function that receives the
# # Python package set and returns the required dependencies.g
# ntp = (ps: [ ps.ntplib ]);
# };
#
# in ddAgentWithNtp = datadog-agent.overrideAttrs(_ : {
# python = integrationsWithNtp.python;
# });
#
# The NixOS module 'datadog-agent' provides a simplified interface to
# this. Please see the module itself for more information.
#
# [1]: https://github.com/DataDog/integrations-core
{
lib,
fetchFromGitHub,
python3Packages,
extraIntegrations ? { },
}:
let
inherit (lib) attrValues mapAttrs;
version = "7.70.2";
src = fetchFromGitHub {
owner = "DataDog";
repo = "integrations-core";
tag = version;
hash = "sha256-3H8nQpy/m53ZjtDfe6s89yowBXnPt+1ARfWxcx+JwQM=";
};
# Build helper to build a single datadog integration package.
buildIntegration =
{ pname, ... }@args:
python3Packages.buildPythonPackage (
args
// {
inherit src version;
name = "datadog-integration-${pname}-${version}";
pyproject = true;
sourceRoot = "${src.name}/${args.sourceRoot or pname}";
buildInputs = with python3Packages; [
hatchling
setuptools
];
doCheck = false;
}
);
# Base package depended on by all other integrations.
datadog_checks_base = buildIntegration {
pname = "checks-base";
sourceRoot = "datadog_checks_base";
dependencies = with python3Packages; [
binary
cachetools
cryptography
immutables
jellyfish
lazy-loader
prometheus-client
protobuf
pydantic
python-dateutil
pyyaml
requests
requests-toolbelt
requests-unixsocket
simplejson
uptime
wrapt
];
pythonImportsCheck = [
"datadog_checks.base"
"datadog_checks.base.checks"
"datadog_checks.checks"
];
};
# Default integrations that should be built:
defaultIntegrations = {
disk = (ps: [ ps.psutil ]);
mongo = (ps: [ ps.pymongo ]);
network = (ps: [ ps.psutil ]);
nginx = (ps: [ ]);
postgres = (
ps: with ps; [
pg8000
psycopg2
semver
]
);
process = (ps: [ ps.psutil ]);
};
# All integrations (default + extra):
integrations = defaultIntegrations // extraIntegrations;
builtIntegrations = mapAttrs (
pname: fdeps:
buildIntegration {
inherit pname;
propagatedBuildInputs = (fdeps python3Packages) ++ [ datadog_checks_base ];
}
) integrations;
in
builtIntegrations
// {
inherit datadog_checks_base;
python = python3Packages.python.withPackages (_: (attrValues builtIntegrations));
}
|