Skip to content

Commit

Permalink
otel: add build tooling to include otel code
Browse files Browse the repository at this point in the history
Adds the --otel flag to the configure command and the various build time
variables and checks that are needed in this flow.

It also includes the nxt_otel.c and nxt_otel.h files that are needed for
the rest of Unit to talk to the compiled static library that's generated
from the rust crate.

Signed-off-by: Ava Hahn <[email protected]>
Co-authored-by: Gabor Javorszky <[email protected]>
Signed-off-by: Gabor Javorszky <[email protected]>
  • Loading branch information
avahahn and javorszky committed Nov 12, 2024
1 parent 8b69710 commit 9d3dcb8
Show file tree
Hide file tree
Showing 12 changed files with 621 additions and 11 deletions.
2 changes: 2 additions & 0 deletions auto/help
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ cat << END

--njs enable njs library usage

--otel enable otel library usage

--debug enable debug logging

--fuzz=ENGINE enable fuzz testing
Expand Down
54 changes: 43 additions & 11 deletions auto/make
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

$echo "creating $NXT_MAKEFILE"


cat << END > $NXT_MAKEFILE

# Pretty print compiler etc actions...
Expand All @@ -22,6 +21,8 @@ AR = $AR

EXTRA_CFLAGS =
CFLAGS = $NXT_CFLAGS $NXT_CC_OPT $CFLAGS \$(EXTRA_CFLAGS)
RUST_FLAGS =
NXT_OTEL_LIB_LOC =

NXT_EXEC_LINK = $NXT_EXEC_LINK $NXT_LD_OPT
NXT_SHARED_LOCAL_LINK = $NXT_SHARED_LOCAL_LINK $NXT_LD_OPT
Expand Down Expand Up @@ -62,6 +63,9 @@ D := 0

ifeq (\$D,1)
CFLAGS += -O0
RUST_FLAGS += --debug
else
RUST_FLAGS += --release
endif

# Optionally disable -Werror with
Expand All @@ -76,6 +80,18 @@ END

fi

# potentially set otel lib location
if [ $NXT_OTEL = YES ]; then
cat << END >> $NXT_MAKEFILE

ifeq (\$D,1)
NXT_OTEL_LIB_LOC = $NXT_OTEL_LIB_DIR/target/debug/libotel.a
else
NXT_OTEL_LIB_LOC = $NXT_OTEL_LIB_DIR/target/release/libotel.a
endif

END
fi

# The include paths list.

Expand Down Expand Up @@ -138,14 +154,14 @@ cat << END >> $NXT_MAKEFILE

libnxt: $NXT_BUILD_DIR/lib/$NXT_LIB_SHARED $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC

$NXT_BUILD_DIR/lib/$NXT_LIB_SHARED: \$(NXT_LIB_OBJS)
$NXT_BUILD_DIR/lib/$NXT_LIB_SHARED: \$(NXT_LIB_OBJS) \$(NXT_OTEL_LIB_LOC)
\$(PP_LD) \$@
\$(v)\$(NXT_SHARED_LOCAL_LINK) -o \$@ \$(NXT_LIB_OBJS) \\
$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS \$(NXT_OTEL_LIB_LOC)

$NXT_BUILD_DIR/lib/$NXT_LIB_STATIC: \$(NXT_LIB_OBJS)
$NXT_BUILD_DIR/lib/$NXT_LIB_STATIC: \$(NXT_LIB_OBJS) \$(NXT_OTEL_LIB_LOC)
\$(PP_AR) \$@
\$(v)$NXT_STATIC_LINK \$@ \$(NXT_LIB_OBJS)
\$(v)$NXT_STATIC_LINK \$@ \$(NXT_LIB_OBJS) \$(NXT_OTEL_LIB_LOC)

$NXT_BUILD_DIR/lib/$NXT_LIB_UNIT_STATIC: \$(NXT_LIB_UNIT_OBJS) \\
$NXT_BUILD_DIR/share/pkgconfig/unit.pc \\
Expand Down Expand Up @@ -359,11 +375,11 @@ $echo >> $NXT_MAKEFILE
cat << END >> $NXT_MAKEFILE

$NXT_BUILD_DIR/sbin/$NXT_DAEMON: $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC \\
\$(NXT_OBJS)
\$(NXT_OBJS) \$(NXT_OTEL_LIB_LOC)
\$(PP_LD) \$@
\$(v)\$(NXT_EXEC_LINK) -o \$@ \$(CFLAGS) \\
\$(NXT_OBJS) $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC \\
$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS
$NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS \$(NXT_OTEL_LIB_LOC)

END

Expand Down Expand Up @@ -535,10 +551,6 @@ cat << END > Makefile

include $NXT_MAKEFILE

.PHONY: clean
clean:
rm -rf $NXT_BUILD_DIR *.dSYM Makefile

.PHONY: help
help:
@echo "Variables to control make/build behaviour:"
Expand All @@ -551,4 +563,24 @@ help:
@echo
@echo " Variables can be combined."

.PHONY: clean
clean:
rm -rf $NXT_BUILD_DIR *.dSYM Makefile
END

if [ $NXT_OTEL = YES ]; then
cat << END >> Makefile
cd "$NXT_OTEL_LIB_DIR" && cargo clean
END

NXT_OTEL_DEPS=" \
build/src/nxt_otel.o \
src/otel/src/lib.rs \
"

cat << END >> $NXT_MAKEFILE

\$(NXT_OTEL_LIB_LOC): $NXT_OTEL_DEPS
cargo build \$(RUST_FLAGS) --manifest-path $NXT_OTEL_LIB_DIR/Cargo.toml
END
fi
2 changes: 2 additions & 0 deletions auto/options
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ NXT_CYASSL=NO
NXT_POLARSSL=NO

NXT_NJS=NO
NXT_OTEL=NO

NXT_TEST_BUILD_EPOLL=NO
NXT_TEST_BUILD_EVENTPORT=NO
Expand Down Expand Up @@ -112,6 +113,7 @@ do
--polarssl) NXT_POLARSSL=YES ;;

--njs) NXT_NJS=YES ;;
--otel) NXT_OTEL=YES ;;

--test-build-epoll) NXT_TEST_BUILD_EPOLL=YES ;;
--test-build-eventport) NXT_TEST_BUILD_EVENTPORT=YES ;;
Expand Down
54 changes: 54 additions & 0 deletions auto/otel
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@

# Copyright (C) NGINX, Inc.

if [ $NXT_OTEL = YES ]; then

$echo "checking for OTEL requirements:"

$echo -n " - checking for rust compiler ... "
if [ -z $(which rustc 2>/dev/null) ]; then
$echo "not found"
exit 1;
fi
$echo "found"

$echo -n " - checking for cargo ... "
if [ -z $(which cargo 2>/dev/null) ]; then
$echo "not found."
exit 1;
fi
$echo "found"

$echo -n " - "

nxt_feature="OpenSSL library"
nxt_feature_run=yes
nxt_feature_incs=
nxt_feature_libs="-lssl -lcrypto"
nxt_feature_test="#include <openssl/ssl.h>

int main(void) {
SSL_library_init();
return 0;
}"
. auto/feature

if [ ! $nxt_found = yes ]; then
$echo
$echo $0: error: OpenTelemetry support requires OpenSSL.
$echo
exit 1;
fi

NXT_OTEL_LIBS="-lssl -lcrypto"
if [ $(which pkg-config) ]; then
NXT_OTEL_LIBS="$(pkg-config openssl --cflags --libs)"
fi
cat << END >> $NXT_AUTO_CONFIG_H

#ifndef NXT_HAVE_OTEL
#define NXT_HAVE_OTEL 1
#endif

END
fi
4 changes: 4 additions & 0 deletions auto/sources
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ if [ "$NXT_NJS" != "NO" ]; then
NXT_LIB_SRCS="$NXT_LIB_SRCS src/nxt_js.c src/nxt_http_js.c src/nxt_script.c"
fi

if [ "$NXT_OTEL" != "NO" ]; then
NXT_LIB_SRCS="$NXT_LIB_SRCS src/nxt_otel.c"
fi

NXT_LIB_EPOLL_SRCS="src/nxt_epoll_engine.c"
NXT_LIB_KQUEUE_SRCS="src/nxt_kqueue_engine.c"
NXT_LIB_EVENTPORT_SRCS="src/nxt_eventport_engine.c"
Expand Down
1 change: 1 addition & 0 deletions auto/summary
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Unit configuration summary:
TLS support: ............... $NXT_OPENSSL
Regex support: ............. $NXT_REGEX
njs support: ............... $NXT_NJS
otel support: .............. $NXT_OTEL

process isolation: ......... $NXT_ISOLATION
cgroupv2: .................. $NXT_HAVE_CGROUP
Expand Down
6 changes: 6 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@ if [ $NXT_NJS != NO ]; then
. auto/njs
fi

NXT_OTEL_LIB_DIR=src/otel
if [ $NXT_OTEL != NO ]; then
. auto/otel
NXT_LIB_AUX_LIBS="$NXT_LIB_AUX_LIBS $NXT_OTEL_LIBS"
fi

. auto/make
. auto/fuzzing
. auto/summary
5 changes: 5 additions & 0 deletions src/nxt_http.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#define _NXT_HTTP_H_INCLUDED_

#include <nxt_regex.h>
#include <nxt_otel.h>


typedef enum {
Expand Down Expand Up @@ -190,6 +191,10 @@ struct nxt_http_request_s {

nxt_http_response_t resp;

#if (NXT_HAVE_OTEL)
nxt_otel_state_t *otel;
#endif

nxt_http_status_t status:16;

uint8_t log_route; /* 1 bit */
Expand Down
5 changes: 5 additions & 0 deletions src/nxt_http_error.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include <nxt_router.h>
#include <nxt_http.h>
#include <nxt_otel.h>


static void nxt_http_request_send_error_body(nxt_task_t *task, void *r,
Expand Down Expand Up @@ -55,6 +56,10 @@ nxt_http_request_error(nxt_task_t *task, nxt_http_request_t *r,
r->resp.content_length = NULL;
r->resp.content_length_n = NXT_HTTP_ERROR_LEN;

#if (NXT_HAVE_OTEL)
nxt_otel_request_error_path(task, r);
#endif

r->state = &nxt_http_request_send_error_body_state;

nxt_http_request_header_send(task, r,
Expand Down
11 changes: 11 additions & 0 deletions src/nxt_http_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include <nxt_router.h>
#include <nxt_http.h>
#include <nxt_otel.h>


static nxt_int_t nxt_http_validate_host(nxt_str_t *host, nxt_mp_t *mp);
Expand Down Expand Up @@ -284,6 +285,16 @@ nxt_http_request_create(nxt_task_t *task)

r->tstr_cache.var.pool = mp;

#if (NXT_HAVE_OTEL)
if (nxt_otel_rs_is_init()) {
r->otel = nxt_mp_zget(r->mem_pool, sizeof(nxt_otel_state_t));
if (nxt_slow_path(r->otel == NULL)) {
goto fail;
}
r->otel->status = NXT_OTEL_INIT_STATE;
}
#endif

return r;

fail:
Expand Down
Loading

0 comments on commit 9d3dcb8

Please sign in to comment.