diff --git a/.htmltest.yml b/.htmltest.yml index dee278b00fe0..d29cf03b3de6 100644 --- a/.htmltest.yml +++ b/.htmltest.yml @@ -33,6 +33,10 @@ IgnoreURLs: # list of regexs of paths or URLs to be ignored # Ignore links to GH repo content for now. - ^https?://github\.com/.*?/.*?/(blob|tree)/ + # Too many redirects as the server tries to figure out the country and language, + # e.g.: https://www.microsoft.com/en-ca/sql-server. + - ^https://www.microsoft.com/sql-server$ + # TODO: drop after fix to https://github.com/rust-lang/crates.io/issues/788 - ^https://crates\.io/crates # TODO: drop after fix to https://github.com/micrometer-metrics/micrometer-docs/issues/239 diff --git a/content-modules/semantic-conventions b/content-modules/semantic-conventions index 2246279243d7..4142dd35ddbe 160000 --- a/content-modules/semantic-conventions +++ b/content-modules/semantic-conventions @@ -1 +1 @@ -Subproject commit 2246279243d743c6e073470f4e3551826f3115bc +Subproject commit 4142dd35ddbe984fa685abcfd4da7ca0ed1a2ac4 diff --git a/content/en/docs/specs/semconv/_index.md b/content/en/docs/specs/semconv/_index.md deleted file mode 100644 index a4f31fd464aa..000000000000 --- a/content/en/docs/specs/semconv/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: OpenTelemetry Semantic Conventions -linkTitle: Semantic Conventions -cascade: - draft: true ---- diff --git a/hugo.yaml b/hugo.yaml index 2151f5273937..be846c108599 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -187,14 +187,8 @@ module: target: content/docs/specs/otlp/_index.md - source: tmp/otlp/docs/img target: content/docs/specs/otlp/img - - source: tmp/semconv/specification/logs - target: content/docs/specs/semconv/logs - - source: tmp/semconv/specification/metrics - target: content/docs/specs/semconv/metrics - - source: tmp/semconv/specification/resource - target: content/docs/specs/semconv/resource - - source: tmp/semconv/specification/trace - target: content/docs/specs/semconv/trace + - source: tmp/semconv/docs + target: content/docs/specs/semconv - source: tmp/community/mission-vision-values.md target: content/community/mission.md - source: tmp/community/roadmap.md diff --git a/scripts/content-modules/adjust-pages.pl b/scripts/content-modules/adjust-pages.pl index a8cb70cf13fe..aafe59fdd1d8 100755 --- a/scripts/content-modules/adjust-pages.pl +++ b/scripts/content-modules/adjust-pages.pl @@ -14,6 +14,7 @@ my $otelSpecRepoUrl = 'https://github.com/open-telemetry/opentelemetry-specification'; my $otlpSpecRepoUrl = 'https://github.com/open-telemetry/opentelemetry-proto'; my $opAmpSpecRepoUrl = 'https://github.com/open-telemetry/opamp-spec'; +my $semconvSpecRepoUrl = 'https://github.com/open-telemetry/semantic-conventions'; my $semConvRef = "$otelSpecRepoUrl/blob/main/semantic_conventions/README.md"; my $specBasePath = '/docs/specs'; my $path_base_for_github_subdir = "content/en$specBasePath"; @@ -23,7 +24,7 @@ ); my $otelSpecVers = $versions{'spec:'}; my $otlpSpecVers = $versions{'otlp:'}; -my $unused; + # TODO: remove once OpAMP spec has been updated my $opampFrontMatter = << "EOS"; title: Open Agent Management Protocol @@ -36,6 +37,47 @@ to: specification.md EOS +# TODO: remove once Semconv spec has been updated +my $semconvFrontMatter = << "EOS"; +linkTitle: Semantic Conventions +no_list: true +cascade: + body_class: otel-docs-spec + github_repo: &repo $semconvSpecRepoUrl + github_subdir: docs + path_base_for_github_subdir: content/en/docs/specs/semconv/ + github_project_repo: *repo + draft: true +EOS + +# Adjust semconv title capitalization +sub toTitleCase($) { + my $str = shift; + my @specialCaseWords = qw( + CloudEvents + CouchDB + DynamoDB + FaaS + GraphQL + gRPC + HBase + MongoDB + OpenTelemetry + RabbitMQ + RocketMQ + ); + my %specialCases = map { lc($_) => $_ } @specialCaseWords; + while ($str =~ /(\b[A-Z]+\b)/g) { + $specialCases{lc $1} = $1; + } + $str =~ s/(\w+)/\u\L$1/g; + while (my ($key, $value) = each %specialCases) { + $str =~ s/\b\u\L$key\b/$value/g; + } + $str =~ s/\b(A|And|As|For|In|On)\b/\L$1/g; + return $str; +} + sub printTitleAndFrontMatter() { print "---\n"; if ($title eq 'OpenTelemetry Specification') { @@ -49,10 +91,52 @@ () $frontMatterFromFile .= "weight: 20\n" if $frontMatterFromFile !~ /^\s*weight/; } elsif ($title eq 'OpAMP: Open Agent Management Protocol') { $frontMatterFromFile = $opampFrontMatter unless $frontMatterFromFile; + } elsif ($title eq 'OpenTelemetry Semantic Conventions') { + $frontMatterFromFile = $semconvFrontMatter unless $frontMatterFromFile; + } elsif ($ARGV =~ /tmp\/semconv\/docs/) { + $title = toTitleCase($title); + $linkTitle = 'Database' if $title =~ /Database Calls and Systems$/i; + if ($linkTitle =~ /^Database (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^FaaS (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^HTTP (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^Microsoft (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^RPC (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^(Exceptions|Feature Flags) .. (.*)$/i) { + $linkTitle = "$2"; + } + if ($linkTitle =~ /^(.*) Attributes$/i && $title ne 'General Attributes') { + $linkTitle = "$1"; + } + $linkTitle = 'Attributes' if $title eq 'General Attributes'; + $linkTitle = 'Events' if $linkTitle eq 'Event'; + $linkTitle = 'Logs' if $title =~ /Logs Attributes$/; + $linkTitle = 'Connect' if $title =~ /Connect RPC$/; + $linkTitle = 'SQL' if $title =~ /SQL Databases$/; + $title = 'Semantic Conventions for Function-as-a-Service' if $title eq 'Semantic Conventions for FaaS'; + $linkTitle = 'Tracing Compatibility' if $linkTitle eq 'Tracing Compatibility Components'; + if ($title =~ /Semantic Convention\b/) { + $title =~ s/Semantic Convention\b/$&s/g; + } } my $titleMaybeQuoted = ($title =~ ':') ? "\"$title\"" : $title; print "title: $titleMaybeQuoted\n" if $frontMatterFromFile !~ /title: /; - ($unused, $linkTitle) = $title =~ /^OpenTelemetry (Protocol )?(.*)/; + printf STDOUT ">1 $title -> $linkTitle\n" if $title =~ /Function/; + if ($title =~ /^OpenTelemetry (Protocol )?(.*)/) { + $linkTitle = $2; + } elsif ($title =~ /^(.*?) Semantic Conventions?$/i && !$linkTitle) { + $linkTitle = $1; + } elsif ($title =~ /^Semantic Conventions? for (.*)$/i && !$linkTitle) { + $linkTitle = $1; + } + if ($linkTitle =~ /^Function.as.a.Service$/i) { + $linkTitle = 'FaaS'; + } + printf STDOUT ">2 $title -> $linkTitle\n" if $title =~ /Function/; # TODO: add to front matter of OTel spec file and drop next line: $linkTitle = 'Design Goals' if $title eq 'Design Goals for OpenTelemetry Wire Protocol'; print "linkTitle: $linkTitle\n" if $linkTitle and $frontMatterFromFile !~ /linkTitle: /; @@ -61,6 +145,13 @@ () print "path_base_for_github_subdir:\n"; print " from: $path_base_for_github_subdir/otel/$1_index.md\n"; print " to: $1README.md\n"; + } elsif ($ARGV =~ /tmp\/semconv\/docs\/(.*?)_index.md$/) { + print "path_base_for_github_subdir:\n"; + print " from: $path_base_for_github_subdir/semconv/$1_index.md\n"; + print " to: $1README.md\n"; + if ($linkTitle eq 'General') { + print "weight: -1\n"; + } } print "---\n"; } @@ -84,6 +175,7 @@ () } if(! $title) { ($title) = /^#\s+(.*)/; + $linkTitle = ''; printTitleAndFrontMatter() if $title; next; } @@ -97,6 +189,16 @@ () next; } + ## Semconv + + if ($ARGV =~ /\/semconv/) { + s|(\]\()/docs/|$1$specBasePath/semconv/|g; + s|(\]:\s*)/docs/|$1$specBasePath/semconv/|; + + # TODO: drop once semconv pages are fixed: + s|(/resource/faas\.md)#function-as-a-service|$1|; + } + # SPECIFICATION custom processing s|\(https://github.com/open-telemetry/opentelemetry-specification\)|($specBasePath/otel/)|; diff --git a/scripts/content-modules/cp-pages.sh b/scripts/content-modules/cp-pages.sh index f9e3d2d970c3..a0f7486b961b 100755 --- a/scripts/content-modules/cp-pages.sh +++ b/scripts/content-modules/cp-pages.sh @@ -68,8 +68,8 @@ echo "COMMUNITY pages: copied and processed" ## Semantic Conventions -SRC=content-modules/semantic-conventions/specification -DEST=$DEST_BASE/semconv/specification +SRC=content-modules/semantic-conventions/docs +DEST=$DEST_BASE/semconv/docs rm -Rf $DEST mkdir -p $DEST diff --git a/scripts/content-modules/normalize-titles.pl b/scripts/content-modules/normalize-titles.pl new file mode 100755 index 000000000000..3229eaea5101 --- /dev/null +++ b/scripts/content-modules/normalize-titles.pl @@ -0,0 +1,180 @@ +#!/usr/bin/perl -w -i +# +# DRAFT script used to normalize semconv doc-page tiles and add Hugo front matter +# + +$^W = 1; + +use strict; +use warnings; +use diagnostics; + +my $file = ''; +my $frontMatterFromFile = ''; +my $title = ''; +my $linkTitle = ''; +my $gD = 0; +my $otelSpecRepoUrl = 'https://github.com/open-telemetry/opentelemetry-specification'; +my $otlpSpecRepoUrl = 'https://github.com/open-telemetry/opentelemetry-proto'; +my $opAmpSpecRepoUrl = 'https://github.com/open-telemetry/opamp-spec'; +my $semconvSpecRepoUrl = 'https://github.com/open-telemetry/semantic-conventions'; +my $semConvRef = "$otelSpecRepoUrl/blob/main/semantic_conventions/README.md"; +my $specBasePath = '/docs/specs'; +my $path_base_for_github_subdir = "content/en$specBasePath"; +my %versions = qw( + spec: 1.22.0 + otlp: 1.0.0 +); +my $otelSpecVers = $versions{'spec:'}; +my $otlpSpecVers = $versions{'otlp:'}; + +# TODO: remove once OpAMP spec has been updated +my $opampFrontMatter = << "EOS"; +title: Open Agent Management Protocol +linkTitle: OpAMP +body_class: otel-docs-spec +github_repo: &repo $opAmpSpecRepoUrl +github_project_repo: *repo +path_base_for_github_subdir: + from: content/en/docs/specs/opamp/index.md + to: specification.md +EOS + +# TODO: remove once Semconv spec has been updated +my $semconvFrontMatter = << "EOS"; +linkTitle: Semantic Conventions +# no_list: true +cascade: + body_class: otel-docs-spec + github_repo: &repo $semconvSpecRepoUrl + github_subdir: docs + path_base_for_github_subdir: content/en/docs/specs/semconv/ + github_project_repo: *repo +EOS + +# Adjust semconv title capitalization +sub toTitleCase($) { + my $str = shift; + my @specialCaseWords = qw( + CloudEvents + CouchDB + DynamoDB + FaaS + GraphQL + gRPC + HBase + MongoDB + OpenTelemetry + RabbitMQ + RocketMQ + ); + my %specialCases = map { lc($_) => $_ } @specialCaseWords; + while ($str =~ /(\b[A-Z]+\b)/g) { + $specialCases{lc $1} = $1; + } + $str =~ s/(\w+)/\u\L$1/g; + while (my ($key, $value) = each %specialCases) { + $str =~ s/\b\u\L$key\b/$value/g; + } + $str =~ s/\b(A|And|As|For|In|On)\b/\L$1/g; + return $str; +} + +sub printTitleAndFrontMatter() { + my $frontMatter = ''; + my $originalTitle = $title; + if ($frontMatterFromFile) { + # printf STDOUT "> $file has front matter:\n$frontMatterFromFile\n"; # if $gD; + $frontMatterFromFile = '' unless $ARGV =~ /\/system\/[^R]/; + # printf STDOUT "> $file\n" if $ARGV =~ /\/system\b/; + } + if ($title eq 'OpenTelemetry Semantic Conventions') { + $frontMatterFromFile = $semconvFrontMatter unless $frontMatterFromFile; + } elsif ($ARGV =~ /json-rpc/) { + $title = 'Semantic Conventions for JSON-RPC'; + } + $title = toTitleCase($title); + my $titleMaybeQuoted = ($title =~ ':') ? "\"$title\"" : $title; + # $frontMatter .= "title: $titleMaybeQuoted\n" if $frontMatterFromFile !~ /title: /; + if ($title =~ /^OpenTelemetry (Protocol )?(.*)/) { + $linkTitle = $2; + } elsif ($title =~ /^(.*?) Semantic Conventions?$/i) { + $linkTitle = toTitleCase($1); + } elsif ($title =~ /^Semantic Conventions? for (.*)$/i) { + $linkTitle = toTitleCase($1); + } + if ($linkTitle =~ /^Function.as.a.Service$/i) { + $linkTitle = 'FaaS'; + } + $linkTitle = 'Database' if $title =~ /Database Calls and Systems$/i; + if ($linkTitle =~ /^Database (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^FaaS (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^HTTP (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^Microsoft (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^RPC (.*)$/i) { + $linkTitle = "$1"; + } elsif ($linkTitle =~ /^(Exceptions|Feature Flags) .. (.*)$/i) { + $linkTitle = "$2"; + } + if ($linkTitle =~ /^(.*) Attributes$/i && $title ne 'General Attributes') { + $linkTitle = "$1"; + } + $linkTitle = 'Attributes' if $title eq 'General Attributes'; + $linkTitle = 'Events' if $linkTitle eq 'Event'; + $linkTitle = 'Logs' if $title =~ /Logs Attributes$/; + $linkTitle = 'Connect' if $title =~ /Connect RPC$/; + $linkTitle = 'SQL' if $title =~ /SQL Databases$/; + $title = 'Semantic Conventions for Function-as-a-Service' if $title eq 'Semantic Conventions for FaaS'; + $linkTitle = 'Tracing Compatibility' if $linkTitle eq 'Tracing Compatibility Components'; + if ($title =~ /Semantic Convention\b/) { + $title =~ s/Semantic Convention\b/$&s/g; + printf STDOUT "> $title -> $linkTitle\n"; + } + + $frontMatter .= "linkTitle: $linkTitle\n" if $linkTitle and $frontMatterFromFile !~ /linkTitle: /; + $frontMatter .= $frontMatterFromFile if $frontMatterFromFile; + if ($ARGV =~ /docs\/(.*?)README.md$/) { + $frontMatter .= "path_base_for_github_subdir:\n"; + $frontMatter .= " from: $path_base_for_github_subdir/semconv/$1_index.md\n"; + $frontMatter .= " to: $1README.md\n"; + } + $frontMatter .= "weight: -1\n" if $title eq 'General Semantic Conventions'; + if ($frontMatter) { + $frontMatter = "\n"; + print "$frontMatter\n"; + } + print "# $title\n" +} + +# main + +while(<>) { + # printf STDOUT "$ARGV Got: $_" if $gD; + + if ($file ne $ARGV) { + $file = $ARGV; + # printf STDOUT "> $file\n"; # if $gD; + $frontMatterFromFile = ''; + $title = ''; + if (/^/; + $frontMatterFromFile .= $_; + } + next; + } + } + if(! $title) { + ($title) = /^#\s+(.*)/; + $linkTitle = ''; + printTitleAndFrontMatter() if $title; + next; + } + + print; +} diff --git a/static/refcache.json b/static/refcache.json index 0ac7a574ffc9..2424d677c7be 100644 --- a/static/refcache.json +++ b/static/refcache.json @@ -123,6 +123,10 @@ "StatusCode": 200, "LastSeen": "2023-06-29T12:28:24.723237-04:00" }, + "https://aws.amazon.com/dynamodb/": { + "StatusCode": 200, + "LastSeen": "2023-07-06T17:57:47.141869-04:00" + }, "https://aws.amazon.com/ecs/": { "StatusCode": 200, "LastSeen": "2023-06-29T13:39:56.688276-04:00" @@ -147,6 +151,10 @@ "StatusCode": 206, "LastSeen": "2023-06-29T12:28:09.411462-04:00" }, + "https://azure.microsoft.com/products/cosmos-db/": { + "StatusCode": 200, + "LastSeen": "2023-07-06T17:58:02.342209-04:00" + }, "https://bazel.build/": { "StatusCode": 200, "LastSeen": "2023-06-29T13:39:27.033525-04:00" @@ -163,6 +171,10 @@ "StatusCode": 200, "LastSeen": "2023-06-29T15:55:02.67164-04:00" }, + "https://cassandra.apache.org/": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:07.715816-04:00" + }, "https://cdn.jsdelivr.net/npm/mermaid@9.3.0/dist/mermaid.min.js": { "StatusCode": 206, "LastSeen": "2023-06-30T09:16:02.918744-04:00" @@ -411,6 +423,10 @@ "StatusCode": 206, "LastSeen": "2023-06-29T13:38:26.570786-04:00" }, + "https://couchdb.apache.org/": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:57:36.620937-04:00" + }, "https://danielabaron.me": { "StatusCode": 206, "LastSeen": "2023-06-29T16:16:03.628698-04:00" @@ -751,6 +767,10 @@ "StatusCode": 206, "LastSeen": "2023-06-29T16:16:24.371007-04:00" }, + "https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:46.994822-04:00" + }, "https://docs.docker.com/engine/reference/run/#container-identification": { "StatusCode": 206, "LastSeen": "2023-06-29T16:07:35.082785-04:00" @@ -2815,6 +2835,10 @@ "StatusCode": 200, "LastSeen": "2023-06-30T11:43:23.38558-04:00" }, + "https://github.com/open-telemetry/semantic-conventions/issues/new": { + "StatusCode": 200, + "LastSeen": "2023-07-06T18:29:34.673526-04:00" + }, "https://github.com/opentracing": { "StatusCode": 200, "LastSeen": "2023-06-30T08:40:39.909083-04:00" @@ -3087,6 +3111,10 @@ "StatusCode": 206, "LastSeen": "2023-06-29T16:15:53.26896-04:00" }, + "https://hbase.apache.org/": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:13.148749-04:00" + }, "https://helm.sh": { "StatusCode": 206, "LastSeen": "2023-06-29T16:04:48.516571-04:00" @@ -3911,6 +3939,10 @@ "StatusCode": 206, "LastSeen": "2023-06-29T18:38:09.870827-04:00" }, + "https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:33.547228-04:00" + }, "https://reactivex.io/RxJava/2.x/javadoc/index.html": { "StatusCode": 206, "LastSeen": "2023-06-29T18:48:07.197849-04:00" @@ -3919,6 +3951,10 @@ "StatusCode": 200, "LastSeen": "2023-06-30T16:26:43.920023-04:00" }, + "https://redis.com/": { + "StatusCode": 200, + "LastSeen": "2023-07-06T17:57:41.927739-04:00" + }, "https://redis.io/commands/hmset": { "StatusCode": 206, "LastSeen": "2023-06-29T18:39:33.193535-04:00" @@ -3935,6 +3971,10 @@ "StatusCode": 206, "LastSeen": "2023-06-30T09:40:22.564248-04:00" }, + "https://rocketmq.apache.org/": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:59.087632-04:00" + }, "https://rubiksqube.com/#/": { "StatusCode": 206, "LastSeen": "2023-06-29T18:50:46.242437-04:00" @@ -4367,6 +4407,10 @@ "StatusCode": 206, "LastSeen": "2023-06-30T09:33:47.364453-04:00" }, + "https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:38.92195-04:00" + }, "https://www.envoyproxy.io": { "StatusCode": 206, "LastSeen": "2023-06-30T08:51:02.248507-04:00" @@ -4603,6 +4647,10 @@ "StatusCode": 206, "LastSeen": "2023-06-30T16:26:05.762975-04:00" }, + "https://www.mongodb.com/": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:57:52.359895-04:00" + }, "https://www.nomadproject.io": { "StatusCode": 206, "LastSeen": "2023-06-30T08:50:51.721695-04:00" @@ -4755,6 +4803,10 @@ "StatusCode": 206, "LastSeen": "2023-06-30T08:38:26.348608-04:00" }, + "https://www.rabbitmq.com/": { + "StatusCode": 206, + "LastSeen": "2023-07-06T17:58:53.682551-04:00" + }, "https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html": { "StatusCode": 206, "LastSeen": "2023-06-29T18:47:51.093028-04:00"