From c049f50adcea7493657bf216316ccfe45cfe0e85 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 11:02:50 -0600 Subject: [PATCH 01/51] Add script to generate Markdown from rules. --- scripts/generate-reference.py | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 scripts/generate-reference.py diff --git a/scripts/generate-reference.py b/scripts/generate-reference.py new file mode 100644 index 0000000..b73e622 --- /dev/null +++ b/scripts/generate-reference.py @@ -0,0 +1,66 @@ +import os +import yaml +from datetime import datetime + +def generate_rule_markdown(rule_data): + message = rule_data['message'] + markdown = f"### {message}\n\n" + markdown += f"**Level:** *{rule_data['level']}*\n\n" + if 'link' in rule_data: + markdown += f"[Link]({rule_data['link']})\n\n" + if 'tokens' in rule_data: + markdown += "**Tokens:**\n" + for token in rule_data['tokens']: + markdown += f"- `{token}`\n" + if 'exceptions' in rule_data: + markdown += "\n**Exceptions:**\n" + for exception in rule_data['exceptions']: + markdown += f"- `{exception}`\n" + if 'swap' in rule_data: + markdown += "\n**Swap:**\n" + if isinstance(rule_data['swap'], dict): + for key, value in rule_data['swap'].items(): + markdown += f"- `{key}` -> `{value}`\n" + elif isinstance(rule_data['swap'], list): + for item in rule_data['swap']: + markdown += f"- `{item}`\n" + if 'ignorecase' in rule_data: + markdown += f"\n**Ignore Case:** {rule_data['ignorecase']}\n" + markdown += "\n" + return markdown + +def process_subfolder(subfolder_path): + markdown_content = "" + for root, dirs, files in os.walk(subfolder_path): + for file in files: + if file.endswith('.yml'): + with open(os.path.join(root, file), 'r') as f: + rule_data = yaml.safe_load(f) + markdown_content += generate_rule_markdown(rule_data) + return markdown_content + +def generate_table_of_contents(style_folders): + toc = "## Table of Contents\n" + for folder in style_folders: + toc += f"- [{folder}](#{folder.lower()})\n" + return toc + +def main(): + styles_folder = 'styles' + style_folders = [folder for folder in os.listdir(styles_folder) if os.path.isdir(os.path.join(styles_folder, folder))] + + markdown_content = "# Vale Linter Rules\n\n" + markdown_content += "This page provides a comprehensive list of the Vale linter rules used in Datadog documentation.\n\n" + markdown_content += f"Last Updated: {datetime.now().strftime('%Y-%m-%d')}\n\n" + markdown_content += generate_table_of_contents(style_folders) + + for style_folder in style_folders: + subfolder_path = os.path.join(styles_folder, style_folder) + markdown_content += f"\n## {style_folder}\n\n" + markdown_content += process_subfolder(subfolder_path) + + with open('rules_overview.md', 'w') as file: + file.write(markdown_content) + +if __name__ == '__main__': + main() \ No newline at end of file From 115d69af69144972995acd11e0899a20cfc308ea Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 11:03:23 -0600 Subject: [PATCH 02/51] Add generated file to .gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1461f1b..86d215e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Docshtml.zip Docsmd.zip +rules_overview.md \ No newline at end of file From b1eba5f2fc0f06150b6e959b536fae05204d57f5 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 11:05:12 -0600 Subject: [PATCH 03/51] Ignore DS_Store. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 86d215e..ca93ed3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ Docshtml.zip Docsmd.zip -rules_overview.md \ No newline at end of file +rules_overview.md +.DS_Store \ No newline at end of file From 86291bb373f25b9da5e162d65298129a1ba113d1 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 11:54:33 -0600 Subject: [PATCH 04/51] Rename file. Add workflow. --- .github/workflows/generate-overview.yml | 38 +++++++++++++++++++ .gitignore | 1 - ...rate-reference.py => generate-overview.py} | 30 ++++++++------- 3 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/generate-overview.yml rename scripts/{generate-reference.py => generate-overview.py} (78%) diff --git a/.github/workflows/generate-overview.yml b/.github/workflows/generate-overview.yml new file mode 100644 index 0000000..f9cbf63 --- /dev/null +++ b/.github/workflows/generate-overview.yml @@ -0,0 +1,38 @@ +name: Generate Rule Overview Page + +on: + push: + branches: + - main + - brett0000FF/generate-rules-page + paths: + - 'styles/**' + - '.github/workflows/generate-rule-markdown.yml' + +jobs: + generate_markdown: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.x + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pyyaml + + - name: Run script to generate Markdown + run: python generate-overview.py + + - name: Commit and push changes + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add rules_overview.md + git commit -m "Update rules overview Markdown" || echo "No changes to commit" + git push \ No newline at end of file diff --git a/.gitignore b/.gitignore index ca93ed3..7e5928b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ Docshtml.zip Docsmd.zip -rules_overview.md .DS_Store \ No newline at end of file diff --git a/scripts/generate-reference.py b/scripts/generate-overview.py similarity index 78% rename from scripts/generate-reference.py rename to scripts/generate-overview.py index b73e622..f054301 100644 --- a/scripts/generate-reference.py +++ b/scripts/generate-overview.py @@ -6,32 +6,35 @@ def generate_rule_markdown(rule_data): message = rule_data['message'] markdown = f"### {message}\n\n" markdown += f"**Level:** *{rule_data['level']}*\n\n" + if 'link' in rule_data: markdown += f"[Link]({rule_data['link']})\n\n" - if 'tokens' in rule_data: - markdown += "**Tokens:**\n" - for token in rule_data['tokens']: - markdown += f"- `{token}`\n" - if 'exceptions' in rule_data: - markdown += "\n**Exceptions:**\n" - for exception in rule_data['exceptions']: - markdown += f"- `{exception}`\n" + + for field in ['tokens', 'exceptions']: + if field in rule_data: + markdown += f"**{field.capitalize()}:**\n" + for item in rule_data[field]: + markdown += f"- `{item}`\n" + markdown += "\n" + if 'swap' in rule_data: - markdown += "\n**Swap:**\n" + markdown += "**Swap:**\n" if isinstance(rule_data['swap'], dict): for key, value in rule_data['swap'].items(): markdown += f"- `{key}` -> `{value}`\n" elif isinstance(rule_data['swap'], list): for item in rule_data['swap']: markdown += f"- `{item}`\n" + markdown += "\n" + if 'ignorecase' in rule_data: - markdown += f"\n**Ignore Case:** {rule_data['ignorecase']}\n" - markdown += "\n" + markdown += f"**Ignore Case:** {rule_data['ignorecase']}\n\n" + return markdown def process_subfolder(subfolder_path): markdown_content = "" - for root, dirs, files in os.walk(subfolder_path): + for root, _, files in os.walk(subfolder_path): for file in files: if file.endswith('.yml'): with open(os.path.join(root, file), 'r') as f: @@ -47,7 +50,8 @@ def generate_table_of_contents(style_folders): def main(): styles_folder = 'styles' - style_folders = [folder for folder in os.listdir(styles_folder) if os.path.isdir(os.path.join(styles_folder, folder))] + style_folders = [folder for folder in os.listdir(styles_folder) + if os.path.isdir(os.path.join(styles_folder, folder))] markdown_content = "# Vale Linter Rules\n\n" markdown_content += "This page provides a comprehensive list of the Vale linter rules used in Datadog documentation.\n\n" From 8998b443fada258118a6ce097600dd02e2f67a4d Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:03:28 -0600 Subject: [PATCH 05/51] Test modifying styles folder --- styles/Datadog/brett-test.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 styles/Datadog/brett-test.yaml diff --git a/styles/Datadog/brett-test.yaml b/styles/Datadog/brett-test.yaml new file mode 100644 index 0000000..425624e --- /dev/null +++ b/styles/Datadog/brett-test.yaml @@ -0,0 +1,9 @@ +extends: existence +message: BRETT TEST +link: https://www.datadoghq.com +ignorecase: true +level: error +nonword: true + +tokens: + - 'TEST` From fa3724233b3e6064af2ddd91ce47f3df460c8df1 Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:11:04 -0600 Subject: [PATCH 06/51] Update generate-overview.yml --- .github/workflows/generate-overview.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-overview.yml b/.github/workflows/generate-overview.yml index f9cbf63..31a6f96 100644 --- a/.github/workflows/generate-overview.yml +++ b/.github/workflows/generate-overview.yml @@ -1,4 +1,4 @@ -name: Generate Rule Overview Page +name: Update Rule Overview Page on: push: @@ -19,7 +19,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.x + python-version: '3.x' - name: Install dependencies run: | @@ -35,4 +35,4 @@ jobs: git config --local user.name "GitHub Action" git add rules_overview.md git commit -m "Update rules overview Markdown" || echo "No changes to commit" - git push \ No newline at end of file + git push From 8dc50d798fd522eff3b13ca1bf915e4199c09504 Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:13:04 -0600 Subject: [PATCH 07/51] Update generate-overview.yml --- .github/workflows/generate-overview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-overview.yml b/.github/workflows/generate-overview.yml index 31a6f96..bc47e8c 100644 --- a/.github/workflows/generate-overview.yml +++ b/.github/workflows/generate-overview.yml @@ -7,7 +7,7 @@ on: - brett0000FF/generate-rules-page paths: - 'styles/**' - - '.github/workflows/generate-rule-markdown.yml' + - '.github/workflows/generate-overview.yml' jobs: generate_markdown: @@ -19,7 +19,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.x' + python-version: 3.x - name: Install dependencies run: | From 5a90699c6d8d374c02d8d35486ab2b3da6b4453e Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:15:39 -0600 Subject: [PATCH 08/51] Fix run path --- .github/workflows/generate-overview.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-overview.yml b/.github/workflows/generate-overview.yml index bc47e8c..baad09a 100644 --- a/.github/workflows/generate-overview.yml +++ b/.github/workflows/generate-overview.yml @@ -27,7 +27,7 @@ jobs: pip install pyyaml - name: Run script to generate Markdown - run: python generate-overview.py + run: python scripts/generate-overview.py - name: Commit and push changes run: | From 9fd774a67c5e412581962dcdf2914ba20799d5f3 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 18:15:55 +0000 Subject: [PATCH 09/51] Update rules overview Markdown --- rules_overview.md | 836 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 836 insertions(+) create mode 100644 rules_overview.md diff --git a/rules_overview.md b/rules_overview.md new file mode 100644 index 0000000..8b76612 --- /dev/null +++ b/rules_overview.md @@ -0,0 +1,836 @@ +# Vale Linter Rules + +This page provides a comprehensive list of the Vale linter rules used in Datadog documentation. + +Last Updated: 2024-03-18 + +## Table of Contents +- [Vocab](#vocab) +- [CWS-Descriptions](#cws-descriptions) +- [SIEM-Names](#siem-names) +- [Datadog](#datadog) +- [CWS-Names](#cws-names) + +## Vocab + + +## CWS-Descriptions + +### Refer to the 'Datadog %s' instead of the 'Datadog %s' + +**Level:** *error* + +**Swap:** +- `agent` -> `Agent` + +**Ignore Case:** False + + +## SIEM-Names + +### Rule names should use sentence case + +**Level:** *error* + +**Exceptions:** +- `1Password` +- `Advanced Protection` +- `Autoscaling Group` +- `Amazon EC2 Instance` +- `Amazon S3` +- `API calls` +- `Auth0 Attack Protection` +- `Auth0 Breached Password Detection` +- `Auth0 Brute Force Protection` +- `Auth0 Guardian MFA` +- `Auth0 Suspicious IP Throttling` +- `AWS Cloudtrail GetCallerIdentity` +- `AWS DescribeInstances` +- `AWS IAM User created with AdministratorAccess policy attached` +- `AWS ConsoleLogin` +- `AWS Console login without MFA` +- `AWS GuardDuty` +- `AWS IAM Roles Anywhere` +- `AWS Kinesis Firehose` +- `AWS Lambda` +- `AWS Network Gateway` +- `AWS Secrets Manager` +- `AWS Systems Manager` +- `AWS Verified Access` +- `AWS VPC Flow Log` +- `Azure Active Directory` +- `Azure AD Identity Protection` +- `Azure AD Privileged Identity Management` +- `CloudTrail` +- `Cloudflare` +- `Cloudflare CASB Finding` +- `Cloudflare L7 DDOS` +- `Crowdstrike Alerts` +- `Enterprise Organization` +- `GitHub` +- `GitHub Advanced Security` +- `GitHub Dependabot` +- `GitHub Personal Access Token` +- `GitHub Secret Scanning` +- `Google App Engine` +- `Google Cloud` +- `Google Cloud IAM Role updated` +- `Google Cloud Storage` +- `Google Cloud Storage Bucket` +- `Google Compute` +- `Google Compute Engine` +- `Google Drive` +- `Google Security Command Center` +- `Google Workspace` +- `IdP configuration changed` +- `Impossible Travel Auth0` +- `IoC` +- `Jamf Protect` +- `Microsoft 365 Application Impersonation` +- `Microsoft 365 Default or Anonymous` +- `Microsoft 365 E-Discovery` +- `Microsoft 365 Exchange` +- `Microsoft 365 Full Access` +- `Microsoft 365 Inbound Connector` +- `Microsoft 365 OneDrive` +- `Microsoft 365 Security and Compliance` +- `Microsoft 365 SendAs` +- `Microsoft Defender for Cloud` +- `Microsoft Intune Enterprise MDM` +- `Microsoft Teams` +- `Okta` +- `Okta Identity Provider` +- `Palo Alto Networks Firewall` +- `RDS Snapshot` +- `Scout Suite` +- `Sqreen` +- `Tor` +- `TruffleHog` +- `Zendesk Automatic Redaction` + + +## Datadog + +### Use '%s' instead of '%s'. + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) + +**Swap:** +- `black ?list` -> `disallow list|exclude list` +- `master` -> `primary` +- `slave` -> `secondary` +- `white ?list` -> `allow list|include list` + +**Ignore Case:** True + +### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) + +**Swap:** +- `\[here\]\(.*?\)` -> `here` +- `\s*here\s*` -> `here` +- `\[this\]\(.*?\)` -> `this` +- `\s*this\s*` -> `this` +- `\[page\]\(.*?\)` -> `page` +- `\s*page\s*` -> `page` +- `\[this page\]\(.*?\)` -> `this page` +- `\s*this page\s*` -> `this page` + +**Ignore Case:** True + +### Use '%s' instead of '%s'. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `a number of` -> `few|several|many` +- `acknowledgement` -> `acknowledgment` +- `App Analytics` -> `Tracing without Limits™` +- `auto(?:\s|-)complete` -> `autocomplete` +- `auto(?:\s|-)completion` -> `autocompletion` +- `Availability Zone` -> `availability zone` +- `Availability Zones` -> `availability zones` +- `back(?:\s|-)end` -> `backend` +- `back(?:\s|-)ends` -> `backends` +- `bear in mind` -> `keep in mind` +- `boolean` -> `Boolean` +- `booleans` -> `Booleans` +- `cheat sheet` -> `cheatsheet` +- `command line interface` -> `command-line interface` +- `Create a new` -> `Create a|Create an` +- `culprit` -> `cause` +- `data are` -> `data is` +- `data(?:\s|-)point` -> `datapoint` +- `data(?:\s|-)points` -> `datapoints` +- `data(?:\s|-)set` -> `dataset` +- `data(?:\s|-)sets` -> `datasets` +- `data-?center` -> `data center` +- `data-?centers` -> `data centers` +- `Datadog (?:app|application)` -> `Datadog|Datadog site` +- `Datadog product` -> `Datadog|Datadog service` +- `data-?source` -> `data source` +- `data-?sources` -> `data sources` +- `default (?:dash|screen)board` -> `out-of-the-box dashboard` +- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` +- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` +- `drill (?:down|into)` -> `examine|investigate|analyze` +- `drilling (?:down|into)` -> `examining|investigating|analyzing` +- `Distributed Tracing` -> `distributed tracing` +- `(?:easy|easily)` -> `` +- `e-?book` -> `eBook` +- `e-?books` -> `eBooks` +- `e-mail` -> `email` +- `e-mailing` -> `emailing` +- `e-mails` -> `emails` +- `end(?:\s|-)point` -> `endpoint` +- `end(?:\s|-)points` -> `endpoints` +- `event (?:stream|streem)` -> `Event Stream` +- `flame-?graph` -> `flame graph` +- `flame-?graphs` -> `flame graphs` +- `figure out` -> `determine` +- `figuring out` -> `determining` +- `file(?:\s|-)name` -> `filename` +- `file(?:\s|-)names` -> `filenames` +- `filesystem` -> `file system` +- `filesystems` -> `file systems` +- `fine\s?-?tune` -> `customize|optimize|refine` +- `for the most part` -> `generally|usually` +- `front(?:\s|-)end` -> `frontend` +- `health-?check` -> `heath check` +- `health-?checks` -> `heath checks` +- `(?:heat-?map|Heat Map)` -> `heat map` +- `(?:heat-?maps|Heat Maps)` -> `heat maps` +- `(?:host-?map|Host Map)` -> `host map` +- `(?:host-?maps|Host Maps)` -> `host maps` +- `hone in` -> `home in` +- `hones in` -> `homes in` +- `honing in` -> `homing in` +- `highly` -> `` +- `hit` -> `click|select` +- `in order to` -> `to` +- `in sync` -> `in-sync` +- `In sync` -> `In-sync` +- `indices` -> `indexes` +- `indexation` -> `indexing` +- `infrastructures` -> `infrastructure` +- `install command` -> `installation command` +- `Internet` -> `internet` +- `(?:i/?-?o|I-?O)` -> `I/O` +- `(?:i/?ops|I/OPS)` -> `IOPS` +- `just` -> `` +- `keep in mind` -> `consider` +- `left up to` -> `determined by` +- `let's assume` -> `assuming|for example, if` +- `load-?balancing` -> `load balancing` +- `machine-?learning` -> `machine learning` +- `micro(?:\s|-)service` -> `microservice` +- `micro(?:\s|-)services` -> `microservices` +- `multi-?alert` -> `multi alert` +- `multicloud` -> `multi-cloud` +- `multiline` -> `multi-line` +- `Note that` -> `**Note**:` +- `(?:obvious|obviously|Obviously)` -> `` +- `off-line` -> `offline` +- `on the fly` -> `real-time|in real time` +- `Once` -> `After` +- `open-?source` -> `open source` +- `page view` -> `pageview` +- `page views` -> `pageviews` +- `play a hand` -> `influence` +- `please` -> `` +- `pre-connect` -> `preconnect` +- `quick|quickly` -> `` +- `screen(?:\s|-)board` -> `screenboard` +- `simple|simply` -> `` +- `single pane of glass` -> `single view|single place|single page` +- `slice and dice` -> `filter and group` +- `stand for` -> `represent|mean` +- `Synthetics` -> `Synthetic Monitoring` +- `reenable` -> `re-enable` +- `run(?:\s|-)time` -> `runtime` +- `refer to|visit` -> `see|read|follow` +- `time board` -> `timeboard` +- `time(?:\s|-)series` -> `timeseries` +- `time-?frame` -> `time frame` +- `time-?frames` -> `time frames` +- `top-?list` -> `top list` +- `trade(?:\s|-)off` -> `trade-off` +- `Trace Search and Analytics` -> `Tracing without Limits™` +- `turnkey` -> `ready to use` +- `under the hood` -> `` +- `utilize` -> `use` +- `very` -> `` +- `via` -> `with|through` +- `visit` -> `see|read` +- `webserver` -> `web server` +- `web site` -> `website` +- `X-axis` -> `x-axis` +- `Y-axis` -> `y-axis` +- `(?:github|Github)` -> `GitHub` +- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` +- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` +- `memcached` -> `Memcached` +- `(?:nginx|Nginx)` -> `NGINX` +- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` +- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` +- `prometheus` -> `Prometheus` +- `(?:sql|Sql)` -> `SQL` +- `(?:statsd|statsD|Statsd)` -> `StatsD` +- `(?:unix|Unix)` -> `UNIX` + +**Ignore Case:** False + +### Use '%s' instead of abbreviations like '%s'. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) + +**Swap:** +- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` +- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` + +**Ignore Case:** True + +### '%s' should use sentence-style capitalization. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#headers) + +**Exceptions:** +- `ACLs` +- `ActiveMQ XML Integration` +- `Agent` +- `Agentless` +- `Agents` +- `Airflow` +- `Amazon` +- `Amazon Web Services` +- `APCu` +- `APIs` +- `APM` +- `Application Performance Monitoring` +- `APM & Continuous Profiler` +- `App Analytics` +- `App Service` +- `AppVeyor` +- `Application Security Management` +- `Application Vulnerability Management` +- `AuthN` +- `Autodiscovery` +- `AWS Step Functions` +- `AWS Systems Manager` +- `Azure` +- `Azure App Service` +- `Azure App Service Plan` +- `Azure Blob Storage` +- `Azure Event Hub` +- `Audit Trail` +- `BitBucket` +- `BuildKite` +- `Browser Monitoring` +- `CakePHP` +- `Cassandra Nodetool` +- `Cassandra Nodetool Integration` +- `CentOS` +- `Chef` +- `CircleCI` +- `CI/CD` +- `CI Visibility` +- `Clipboard` +- `Cloud Cost Management` +- `Cloud Pub Sub` +- `Cloud Security Management` +- `Cloud Security Posture Management` +- `Cloud SIEM` +- `Cloud Workload Security` +- `CloudFormation` +- `CloudSQL` +- `CloudTrail` +- `CloudWatch` +- `Cluster Agent` +- `Continuous Profiler` +- `Continuous Testing` +- `DaemonSet` +- `Data Collected` +- `Database Monitoring` +- `Datadog` +- `DatadogMetric` +- `Datadog Agent Manager` +- `Datadog for Government` +- `Datadog Forwarder` +- `Datadog Lambda Extension` +- `Datadog Operator` +- `Datadog Plugin` +- `Datadog Watchdog` +- `DatadogHook` +- `Debian` +- `Detection Rules` +- `Docker` +- `Docker Compose` +- `Docker Swarm` +- `Dockerfile` +- `DogStatsD` +- `Envoy` +- `Fargate` +- `FastCGI` +- `Firehose Nozzle` +- `FireLens` +- `Fluent Bit` +- `Fluentd` +- `FreeBSD` +- `FreeSwitch` +- `Further Reading` +- `GeoIP` +- `Git` +- `GitHub` +- `GitHub Actions` +- `GitLab` +- `GitLab Runner Integration` +- `Google` +- `Google Analytics` +- `Google Cloud` +- `Google Cloud Functions` +- `GraphQL` +- `Gunicorn` +- `HAProxy` +- `HBase RegionServer Integration` +- `HDFS DataNode Integration` +- `HDFS NameNode Integration` +- `Helm` +- `Heroku` +- `HipChat` +- `HostPort` +- `I` +- `IdP` +- `IDs` +- `iLert` +- `Incident Management` +- `Infrastructure Monitoring` +- `Ingress Controller` +- `Internet Information Services` +- `IoT` +- `IPs` +- `Java` +- `JavaScript` +- `JBoss` +- `Jenkins` +- `JFrog` +- `JFrog Artifactory` +- `Jira` +- `JMXFetch` +- `Journald` +- `Kafka` +- `Kafka Consumer Integration` +- `Kubernetes` +- `Kubernetes Engine` +- `Kubernetes Pod` +- `Kubernetes Service` +- `Lambda` +- `Lambda Layer` +- `Lambda@Edge` +- `LaunchDarkly` +- `Linux` +- `Live Analytics` +- `Live Search` +- `Live Tail` +- `Log Explorer` +- `Log Management` +- `Log Rehydration` +- `Logback` +- `macOS` +- `Marketplace` +- `MarkLogic` +- `Meraki` +- `Mesos Slave Integration` +- `Metrics Explorer` +- `Metrics without Limits` +- `Mobile Monitoring` +- `MongoDB` +- `MsTest` +- `MySQL` +- `Network Address Translation` +- `Network Device Monitoring` +- `Network Performance Monitoring` +- `New Relic` +- `NGINX Plus` +- `NixOS` +- `Node` +- `Notebook` +- `Notebook List` +- `npm` +- `NXLog` +- `Observability Pipelines` +- `OkHttp` +- `OneLogin` +- `OPcache` +- `OpenLDAP` +- `OpenMetrics` +- `OpenShift` +- `OpenStack` +- `openSUSE` +- `OpenTelemetry` +- `OpenTracing` +- `OpenVPN` +- `OpsGenie` +- `OpsWorks` +- `Oracle Instant Client` +- `Phusion Passenger` +- `Pipeline Visibility` +- `Pivotal Platform` +- `Postgres` +- `PostgreSQL` +- `PowerDNS` +- `Prometheus` +- `Prometheus Alertmanager` +- `Puppet` +- `Python` +- `RabbitMQ` +- `Rails` +- `Rancher` +- `Real User Monitoring` +- `Red Hat` +- `Redis` +- `ReplicaSet` +- `RocketPants` +- `Roku Monitoring` +- `Root Cause Analysis` +- `Route53` +- `RSpec` +- `Ruby` +- `RUM` +- `RumMonitor` +- `SafeNet` +- `SaltStack` +- `Security Monitoring` +- `Security Signal` +- `Security Signals` +- `SELinux` +- `Sensitive Data Scanner` +- `Serverless APM` +- `Serverless Framework` +- `Serverless Monitoring` +- `Serverless Workload Monitoring` +- `Service Checks` +- `Session Replay` +- `Siri` +- `Slack` +- `SLIs` +- `SLOs` +- `socat` +- `Social Security` +- `SQL Server` +- `SQLDelight` +- `SQLite` +- `Stackdriver` +- `StackPulse` +- `StackStorm` +- `StatsD` +- `Sumo Logic` +- `Swift` +- `Synthetic Monitoring` +- `Syslog` +- `sysOID` +- `System Core` +- `System Swap` +- `Teamcity` +- `Terraform` +- `Testing Visibility` +- `TokuMX` +- `Tracing Without Limits` +- `Trello` +- `Twilio` +- `TypeScript` +- `Ubuntu` +- `Unified Service Tagging` +- `Unix` +- `Unix Domain Socket` +- `URLs` +- `User Datagram Protocol` +- `USM` +- `Universal Service Monitoring` +- `Varnish` +- `Vector` +- `Vertica` +- `VMWare` +- `vSphere` +- `Watchdog` +- `Watchdog Insights` +- `Webhook` +- `WildFly` +- `Windows` +- `Xray` +- `ZooKeeper` + +### Missing ™ on phrase '%s' + +**Level:** *error* + +[Link](https://www.datadoghq.com) + +**Tokens:** +- `(? `unfamiliar` +- `unusual` -> `unfamiliar` +- `new` -> `unfamiliar` + +**Ignore Case:** True + +### Rule names should not be longer than 10 words + +**Level:** *error* + +**Ignore Case:** False + From 4f59ee83dde1f586010490b5c9baa16a27f4e7b8 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 12:19:54 -0600 Subject: [PATCH 10/51] Flag Rule Overview page as auto-generated. --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..841456b --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +rules_overview.md linguist-generated=true \ No newline at end of file From e1f197512e9e76e5abb9ceafc92c34558d95ec00 Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:21:15 -0600 Subject: [PATCH 11/51] Trigger test --- styles/Datadog/brett-test.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/styles/Datadog/brett-test.yaml b/styles/Datadog/brett-test.yaml index 425624e..57c080a 100644 --- a/styles/Datadog/brett-test.yaml +++ b/styles/Datadog/brett-test.yaml @@ -6,4 +6,5 @@ level: error nonword: true tokens: - - 'TEST` + - `TEST` + - `TEST2` From 3f6ac7902349f0bd39389f6b48810dace16cde78 Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:22:48 -0600 Subject: [PATCH 12/51] Update brett-test.yaml --- styles/Datadog/brett-test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/styles/Datadog/brett-test.yaml b/styles/Datadog/brett-test.yaml index 57c080a..2671149 100644 --- a/styles/Datadog/brett-test.yaml +++ b/styles/Datadog/brett-test.yaml @@ -6,5 +6,5 @@ level: error nonword: true tokens: - - `TEST` - - `TEST2` + - 'TEST' + - 'TEST2' From 1e6cfaf95f2d91501013f1910f1e9a27a947ffdc Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 12:37:53 -0600 Subject: [PATCH 13/51] Remove test. --- styles/Datadog/brett-test.yaml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 styles/Datadog/brett-test.yaml diff --git a/styles/Datadog/brett-test.yaml b/styles/Datadog/brett-test.yaml deleted file mode 100644 index 2671149..0000000 --- a/styles/Datadog/brett-test.yaml +++ /dev/null @@ -1,10 +0,0 @@ -extends: existence -message: BRETT TEST -link: https://www.datadoghq.com -ignorecase: true -level: error -nonword: true - -tokens: - - 'TEST' - - 'TEST2' From 53e73fec64dfd0ec25c49f3ff00123283d51e170 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 12:38:22 -0600 Subject: [PATCH 14/51] Add test pages. --- rules_overview.md | 764 ++++++++++++++++++++------------------- styles/Datadog/test.yml | 12 + styles/Datadog/test3.yml | 12 + 3 files changed, 415 insertions(+), 373 deletions(-) create mode 100644 styles/Datadog/test.yml create mode 100644 styles/Datadog/test3.yml diff --git a/rules_overview.md b/rules_overview.md index 8b76612..e33c8ba 100644 --- a/rules_overview.md +++ b/rules_overview.md @@ -5,14 +5,11 @@ This page provides a comprehensive list of the Vale linter rules used in Datadog Last Updated: 2024-03-18 ## Table of Contents -- [Vocab](#vocab) - [CWS-Descriptions](#cws-descriptions) -- [SIEM-Names](#siem-names) -- [Datadog](#datadog) - [CWS-Names](#cws-names) - -## Vocab - +- [Vocab](#vocab) +- [Datadog](#datadog) +- [SIEM-Names](#siem-names) ## CWS-Descriptions @@ -26,278 +23,65 @@ Last Updated: 2024-03-18 **Ignore Case:** False -## SIEM-Names +## CWS-Names -### Rule names should use sentence case +### Rule names should avoid weak works like '%s' **Level:** *error* -**Exceptions:** -- `1Password` -- `Advanced Protection` -- `Autoscaling Group` -- `Amazon EC2 Instance` -- `Amazon S3` -- `API calls` -- `Auth0 Attack Protection` -- `Auth0 Breached Password Detection` -- `Auth0 Brute Force Protection` -- `Auth0 Guardian MFA` -- `Auth0 Suspicious IP Throttling` -- `AWS Cloudtrail GetCallerIdentity` -- `AWS DescribeInstances` -- `AWS IAM User created with AdministratorAccess policy attached` -- `AWS ConsoleLogin` -- `AWS Console login without MFA` -- `AWS GuardDuty` -- `AWS IAM Roles Anywhere` -- `AWS Kinesis Firehose` -- `AWS Lambda` -- `AWS Network Gateway` -- `AWS Secrets Manager` -- `AWS Systems Manager` -- `AWS Verified Access` -- `AWS VPC Flow Log` -- `Azure Active Directory` -- `Azure AD Identity Protection` -- `Azure AD Privileged Identity Management` -- `CloudTrail` -- `Cloudflare` -- `Cloudflare CASB Finding` -- `Cloudflare L7 DDOS` -- `Crowdstrike Alerts` -- `Enterprise Organization` -- `GitHub` -- `GitHub Advanced Security` -- `GitHub Dependabot` -- `GitHub Personal Access Token` -- `GitHub Secret Scanning` -- `Google App Engine` -- `Google Cloud` -- `Google Cloud IAM Role updated` -- `Google Cloud Storage` -- `Google Cloud Storage Bucket` -- `Google Compute` -- `Google Compute Engine` -- `Google Drive` -- `Google Security Command Center` -- `Google Workspace` -- `IdP configuration changed` -- `Impossible Travel Auth0` -- `IoC` -- `Jamf Protect` -- `Microsoft 365 Application Impersonation` -- `Microsoft 365 Default or Anonymous` -- `Microsoft 365 E-Discovery` -- `Microsoft 365 Exchange` -- `Microsoft 365 Full Access` -- `Microsoft 365 Inbound Connector` -- `Microsoft 365 OneDrive` -- `Microsoft 365 Security and Compliance` -- `Microsoft 365 SendAs` -- `Microsoft Defender for Cloud` -- `Microsoft Intune Enterprise MDM` -- `Microsoft Teams` -- `Okta` -- `Okta Identity Provider` -- `Palo Alto Networks Firewall` -- `RDS Snapshot` -- `Scout Suite` -- `Sqreen` -- `Tor` -- `TruffleHog` -- `Zendesk Automatic Redaction` +[Link](https://developers.google.com/tech-writing/one/clear-sentences) +**Tokens:** +- `was` +- `were` +- `is` +- `are` -## Datadog +**Ignore Case:** True -### Use '%s' instead of '%s'. +### Rule names should not be longer than 10 words **Level:** *error* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) +**Ignore Case:** False -**Swap:** -- `black ?list` -> `disallow list|exclude list` -- `master` -> `primary` -- `slave` -> `secondary` -- `white ?list` -> `allow list|include list` +### Rule names should not start with '%s' -**Ignore Case:** True +**Level:** *error* -### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. +**Tokens:** +- `A` +- `An` +- `The` -**Level:** *warning* +**Ignore Case:** False -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) +### New Value rules should use '%s' instead of '%s' + +**Level:** *error* **Swap:** -- `\[here\]\(.*?\)` -> `here` -- `\s*here\s*` -> `here` -- `\[this\]\(.*?\)` -> `this` -- `\s*this\s*` -> `this` -- `\[page\]\(.*?\)` -> `page` -- `\s*page\s*` -> `page` -- `\[this page\]\(.*?\)` -> `this page` -- `\s*this page\s*` -> `this page` +- `unrecognized` -> `unfamiliar` +- `unusual` -> `unfamiliar` +- `new` -> `unfamiliar` **Ignore Case:** True -### Use '%s' instead of '%s'. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) - -**Swap:** -- `a number of` -> `few|several|many` -- `acknowledgement` -> `acknowledgment` -- `App Analytics` -> `Tracing without Limits™` -- `auto(?:\s|-)complete` -> `autocomplete` -- `auto(?:\s|-)completion` -> `autocompletion` -- `Availability Zone` -> `availability zone` -- `Availability Zones` -> `availability zones` -- `back(?:\s|-)end` -> `backend` -- `back(?:\s|-)ends` -> `backends` -- `bear in mind` -> `keep in mind` -- `boolean` -> `Boolean` -- `booleans` -> `Booleans` -- `cheat sheet` -> `cheatsheet` -- `command line interface` -> `command-line interface` -- `Create a new` -> `Create a|Create an` -- `culprit` -> `cause` -- `data are` -> `data is` -- `data(?:\s|-)point` -> `datapoint` -- `data(?:\s|-)points` -> `datapoints` -- `data(?:\s|-)set` -> `dataset` -- `data(?:\s|-)sets` -> `datasets` -- `data-?center` -> `data center` -- `data-?centers` -> `data centers` -- `Datadog (?:app|application)` -> `Datadog|Datadog site` -- `Datadog product` -> `Datadog|Datadog service` -- `data-?source` -> `data source` -- `data-?sources` -> `data sources` -- `default (?:dash|screen)board` -> `out-of-the-box dashboard` -- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` -- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` -- `drill (?:down|into)` -> `examine|investigate|analyze` -- `drilling (?:down|into)` -> `examining|investigating|analyzing` -- `Distributed Tracing` -> `distributed tracing` -- `(?:easy|easily)` -> `` -- `e-?book` -> `eBook` -- `e-?books` -> `eBooks` -- `e-mail` -> `email` -- `e-mailing` -> `emailing` -- `e-mails` -> `emails` -- `end(?:\s|-)point` -> `endpoint` -- `end(?:\s|-)points` -> `endpoints` -- `event (?:stream|streem)` -> `Event Stream` -- `flame-?graph` -> `flame graph` -- `flame-?graphs` -> `flame graphs` -- `figure out` -> `determine` -- `figuring out` -> `determining` -- `file(?:\s|-)name` -> `filename` -- `file(?:\s|-)names` -> `filenames` -- `filesystem` -> `file system` -- `filesystems` -> `file systems` -- `fine\s?-?tune` -> `customize|optimize|refine` -- `for the most part` -> `generally|usually` -- `front(?:\s|-)end` -> `frontend` -- `health-?check` -> `heath check` -- `health-?checks` -> `heath checks` -- `(?:heat-?map|Heat Map)` -> `heat map` -- `(?:heat-?maps|Heat Maps)` -> `heat maps` -- `(?:host-?map|Host Map)` -> `host map` -- `(?:host-?maps|Host Maps)` -> `host maps` -- `hone in` -> `home in` -- `hones in` -> `homes in` -- `honing in` -> `homing in` -- `highly` -> `` -- `hit` -> `click|select` -- `in order to` -> `to` -- `in sync` -> `in-sync` -- `In sync` -> `In-sync` -- `indices` -> `indexes` -- `indexation` -> `indexing` -- `infrastructures` -> `infrastructure` -- `install command` -> `installation command` -- `Internet` -> `internet` -- `(?:i/?-?o|I-?O)` -> `I/O` -- `(?:i/?ops|I/OPS)` -> `IOPS` -- `just` -> `` -- `keep in mind` -> `consider` -- `left up to` -> `determined by` -- `let's assume` -> `assuming|for example, if` -- `load-?balancing` -> `load balancing` -- `machine-?learning` -> `machine learning` -- `micro(?:\s|-)service` -> `microservice` -- `micro(?:\s|-)services` -> `microservices` -- `multi-?alert` -> `multi alert` -- `multicloud` -> `multi-cloud` -- `multiline` -> `multi-line` -- `Note that` -> `**Note**:` -- `(?:obvious|obviously|Obviously)` -> `` -- `off-line` -> `offline` -- `on the fly` -> `real-time|in real time` -- `Once` -> `After` -- `open-?source` -> `open source` -- `page view` -> `pageview` -- `page views` -> `pageviews` -- `play a hand` -> `influence` -- `please` -> `` -- `pre-connect` -> `preconnect` -- `quick|quickly` -> `` -- `screen(?:\s|-)board` -> `screenboard` -- `simple|simply` -> `` -- `single pane of glass` -> `single view|single place|single page` -- `slice and dice` -> `filter and group` -- `stand for` -> `represent|mean` -- `Synthetics` -> `Synthetic Monitoring` -- `reenable` -> `re-enable` -- `run(?:\s|-)time` -> `runtime` -- `refer to|visit` -> `see|read|follow` -- `time board` -> `timeboard` -- `time(?:\s|-)series` -> `timeseries` -- `time-?frame` -> `time frame` -- `time-?frames` -> `time frames` -- `top-?list` -> `top list` -- `trade(?:\s|-)off` -> `trade-off` -- `Trace Search and Analytics` -> `Tracing without Limits™` -- `turnkey` -> `ready to use` -- `under the hood` -> `` -- `utilize` -> `use` -- `very` -> `` -- `via` -> `with|through` -- `visit` -> `see|read` -- `webserver` -> `web server` -- `web site` -> `website` -- `X-axis` -> `x-axis` -- `Y-axis` -> `y-axis` -- `(?:github|Github)` -> `GitHub` -- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` -- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` -- `memcached` -> `Memcached` -- `(?:nginx|Nginx)` -> `NGINX` -- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` -- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` -- `prometheus` -> `Prometheus` -- `(?:sql|Sql)` -> `SQL` -- `(?:statsd|statsD|Statsd)` -> `StatsD` -- `(?:unix|Unix)` -> `UNIX` +### Rule names should use sentence case -**Ignore Case:** False +**Level:** *error* -### Use '%s' instead of abbreviations like '%s'. +**Exceptions:** +- `OverlayFS` +- `DNS` +- `TXT` +- `Kubernetes` -**Level:** *warning* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) +## Vocab -**Swap:** -- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` -- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` -**Ignore Case:** True +## Datadog ### '%s' should use sentence-style capitalization. @@ -570,32 +354,256 @@ Last Updated: 2024-03-18 - `Xray` - `ZooKeeper` -### Missing ™ on phrase '%s' +### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) + +**Swap:** +- `\[here\]\(.*?\)` -> `here` +- `\s*here\s*` -> `here` +- `\[this\]\(.*?\)` -> `this` +- `\s*this\s*` -> `this` +- `\[page\]\(.*?\)` -> `page` +- `\s*page\s*` -> `page` +- `\[this page\]\(.*?\)` -> `this page` +- `\s*this page\s*` -> `this page` + +**Ignore Case:** True + +### Use a gender-neutral pronoun instead of '%s'. + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#gender) + +**Tokens:** +- `he/she` +- `s/he` +- `\(s\)he` +- `\bhe\b` +- `\bhim\b` +- `\bhis\b` +- `\bshe\b` +- `\bher\b` + +**Ignore Case:** True + +### Avoid first-person pronouns such as '%s'. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#pronouns) + +**Tokens:** +- `(?<=^|\s)I(?=\s)` +- `(?<=^|\s)I,(?=\s)` +- `\bI'm\b` +- `(?<=\s)[Mm]e\b` +- `(?<=\s)[Mm]y\b` +- `(?<=\s)[Mm]ine\b` +- `(?<=\s)[Ww]e\b` +- `we'(?:ve|re)` +- `(?<=\s)[Uu]s\b` +- `(?<=\s)[Oo]ur\b` +- `\blet's\b` + +### Use straight quotes instead of smart quotes. + +**Level:** *error* + +**Tokens:** +- `“` +- `”` +- `‘` +- `’` + +### Don't put a space before or after a dash. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) + +**Tokens:** +- `\s[—–]\s` + +### Use '%s' instead of '%s'. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `a number of` -> `few|several|many` +- `acknowledgement` -> `acknowledgment` +- `App Analytics` -> `Tracing without Limits™` +- `auto(?:\s|-)complete` -> `autocomplete` +- `auto(?:\s|-)completion` -> `autocompletion` +- `Availability Zone` -> `availability zone` +- `Availability Zones` -> `availability zones` +- `back(?:\s|-)end` -> `backend` +- `back(?:\s|-)ends` -> `backends` +- `bear in mind` -> `keep in mind` +- `boolean` -> `Boolean` +- `booleans` -> `Booleans` +- `cheat sheet` -> `cheatsheet` +- `command line interface` -> `command-line interface` +- `Create a new` -> `Create a|Create an` +- `culprit` -> `cause` +- `data are` -> `data is` +- `data(?:\s|-)point` -> `datapoint` +- `data(?:\s|-)points` -> `datapoints` +- `data(?:\s|-)set` -> `dataset` +- `data(?:\s|-)sets` -> `datasets` +- `data-?center` -> `data center` +- `data-?centers` -> `data centers` +- `Datadog (?:app|application)` -> `Datadog|Datadog site` +- `Datadog product` -> `Datadog|Datadog service` +- `data-?source` -> `data source` +- `data-?sources` -> `data sources` +- `default (?:dash|screen)board` -> `out-of-the-box dashboard` +- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` +- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` +- `drill (?:down|into)` -> `examine|investigate|analyze` +- `drilling (?:down|into)` -> `examining|investigating|analyzing` +- `Distributed Tracing` -> `distributed tracing` +- `(?:easy|easily)` -> `` +- `e-?book` -> `eBook` +- `e-?books` -> `eBooks` +- `e-mail` -> `email` +- `e-mailing` -> `emailing` +- `e-mails` -> `emails` +- `end(?:\s|-)point` -> `endpoint` +- `end(?:\s|-)points` -> `endpoints` +- `event (?:stream|streem)` -> `Event Stream` +- `flame-?graph` -> `flame graph` +- `flame-?graphs` -> `flame graphs` +- `figure out` -> `determine` +- `figuring out` -> `determining` +- `file(?:\s|-)name` -> `filename` +- `file(?:\s|-)names` -> `filenames` +- `filesystem` -> `file system` +- `filesystems` -> `file systems` +- `fine\s?-?tune` -> `customize|optimize|refine` +- `for the most part` -> `generally|usually` +- `front(?:\s|-)end` -> `frontend` +- `health-?check` -> `heath check` +- `health-?checks` -> `heath checks` +- `(?:heat-?map|Heat Map)` -> `heat map` +- `(?:heat-?maps|Heat Maps)` -> `heat maps` +- `(?:host-?map|Host Map)` -> `host map` +- `(?:host-?maps|Host Maps)` -> `host maps` +- `hone in` -> `home in` +- `hones in` -> `homes in` +- `honing in` -> `homing in` +- `highly` -> `` +- `hit` -> `click|select` +- `in order to` -> `to` +- `in sync` -> `in-sync` +- `In sync` -> `In-sync` +- `indices` -> `indexes` +- `indexation` -> `indexing` +- `infrastructures` -> `infrastructure` +- `install command` -> `installation command` +- `Internet` -> `internet` +- `(?:i/?-?o|I-?O)` -> `I/O` +- `(?:i/?ops|I/OPS)` -> `IOPS` +- `just` -> `` +- `keep in mind` -> `consider` +- `left up to` -> `determined by` +- `let's assume` -> `assuming|for example, if` +- `load-?balancing` -> `load balancing` +- `machine-?learning` -> `machine learning` +- `micro(?:\s|-)service` -> `microservice` +- `micro(?:\s|-)services` -> `microservices` +- `multi-?alert` -> `multi alert` +- `multicloud` -> `multi-cloud` +- `multiline` -> `multi-line` +- `Note that` -> `**Note**:` +- `(?:obvious|obviously|Obviously)` -> `` +- `off-line` -> `offline` +- `on the fly` -> `real-time|in real time` +- `Once` -> `After` +- `open-?source` -> `open source` +- `page view` -> `pageview` +- `page views` -> `pageviews` +- `play a hand` -> `influence` +- `please` -> `` +- `pre-connect` -> `preconnect` +- `quick|quickly` -> `` +- `screen(?:\s|-)board` -> `screenboard` +- `simple|simply` -> `` +- `single pane of glass` -> `single view|single place|single page` +- `slice and dice` -> `filter and group` +- `stand for` -> `represent|mean` +- `Synthetics` -> `Synthetic Monitoring` +- `reenable` -> `re-enable` +- `run(?:\s|-)time` -> `runtime` +- `refer to|visit` -> `see|read|follow` +- `time board` -> `timeboard` +- `time(?:\s|-)series` -> `timeseries` +- `time-?frame` -> `time frame` +- `time-?frames` -> `time frames` +- `top-?list` -> `top list` +- `trade(?:\s|-)off` -> `trade-off` +- `Trace Search and Analytics` -> `Tracing without Limits™` +- `turnkey` -> `ready to use` +- `under the hood` -> `` +- `utilize` -> `use` +- `very` -> `` +- `via` -> `with|through` +- `visit` -> `see|read` +- `webserver` -> `web server` +- `web site` -> `website` +- `X-axis` -> `x-axis` +- `Y-axis` -> `y-axis` +- `(?:github|Github)` -> `GitHub` +- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` +- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` +- `memcached` -> `Memcached` +- `(?:nginx|Nginx)` -> `NGINX` +- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` +- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` +- `prometheus` -> `Prometheus` +- `(?:sql|Sql)` -> `SQL` +- `(?:statsd|statsD|Statsd)` -> `StatsD` +- `(?:unix|Unix)` -> `UNIX` + +**Ignore Case:** False + +### Use '%s' instead of abbreviations like '%s'. -**Level:** *error* +**Level:** *warning* -[Link](https://www.datadoghq.com) +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) -**Tokens:** -- `(? `for example` +- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` **Ignore Case:** True -### Avoid temporal words like '%s'. +### Brett Test 2 **Level:** *warning* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#tense) +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) **Tokens:** -- `currently` -- `now` -- `will` -- `won't` -- `[a-zA-Z]*'ll` +- `\s[—–]\s` + +### Use '%s' instead of '%s'. + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) + +**Swap:** +- `black ?list` -> `disallow list|exclude list` +- `master` -> `primary` +- `slave` -> `secondary` +- `white ?list` -> `allow list|include list` **Ignore Case:** True @@ -665,65 +673,23 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Avoid first-person pronouns such as '%s'. +### Brett Test 3 **Level:** *warning* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#pronouns) - -**Tokens:** -- `(?<=^|\s)I(?=\s)` -- `(?<=^|\s)I,(?=\s)` -- `\bI'm\b` -- `(?<=\s)[Mm]e\b` -- `(?<=\s)[Mm]y\b` -- `(?<=\s)[Mm]ine\b` -- `(?<=\s)[Ww]e\b` -- `we'(?:ve|re)` -- `(?<=\s)[Uu]s\b` -- `(?<=\s)[Oo]ur\b` -- `\blet's\b` - -### Avoid en dashes ('–'). For hyphenated words, use a hyphen ('-'). -For parenthesis, use an em dash ('—'). - -**Level:** *error* - [Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) **Tokens:** -- `–` - -### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s'. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) - -**Swap:** -- `{'(?:autodiscovery|auto-discovery|Auto-discovery)': 'Autodiscovery|automatic detection'}` -- `{'(?:autodiscover|auto-discover|Auto-discover)': 'Autodiscover|automatically detect'}` -- `{'(?:autodiscovered|auto-discovered|Auto-discovered)': 'Autodiscovered|automatically detected'}` - -**Ignore Case:** False +- `\s[—–]\s` -### Use a gender-neutral pronoun instead of '%s'. +### Use the Oxford comma in '%s'. -**Level:** *error* +**Level:** *suggestion* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#gender) +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#commas) **Tokens:** -- `he/she` -- `s/he` -- `\(s\)he` -- `\bhe\b` -- `\bhim\b` -- `\bhis\b` -- `\bshe\b` -- `\bher\b` - -**Ignore Case:** True +- `(?:[^,]+,){1,}\s\w+\s(?:and|or)` ### Use only one space between words and sentences (not two). @@ -734,15 +700,21 @@ For parenthesis, use an em dash ('—'). **Tokens:** - `[\w.?!,\(\)\-":] {2,}[\w.?!,\(\)\-":]` -### Use straight quotes instead of smart quotes. +### Try to keep your sentence length to 25 words or fewer. + +**Level:** *suggestion* + +**Ignore Case:** False + +### Avoid en dashes ('–'). For hyphenated words, use a hyphen ('-'). +For parenthesis, use an em dash ('—'). **Level:** *error* +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) + **Tokens:** -- `“` -- `”` -- `‘` -- `’` +- `–` ### Format times as 'HOUR:MINUTE a.m.' or HOUR:MINUTE p.m.' instead of '%s'. @@ -755,82 +727,128 @@ For parenthesis, use an em dash ('—'). - `(1[012]|[1-9]):[0-5][0-9] (?i)(a\.m[^\.]|p\.m[^\.])` - `(1[012]|[1-9]):[0-5][0-9][ ]?(?i)(am|pm)` -### Use the Oxford comma in '%s'. - -**Level:** *suggestion* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#commas) - -**Tokens:** -- `(?:[^,]+,){1,}\s\w+\s(?:and|or)` - -### Don't put a space before or after a dash. +### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s'. **Level:** *warning* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) - -**Tokens:** -- `\s[—–]\s` - -### Try to keep your sentence length to 25 words or fewer. - -**Level:** *suggestion* - -**Ignore Case:** False - - -## CWS-Names - -### Rule names should not start with '%s' - -**Level:** *error* +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) -**Tokens:** -- `A` -- `An` -- `The` +**Swap:** +- `{'(?:autodiscovery|auto-discovery|Auto-discovery)': 'Autodiscovery|automatic detection'}` +- `{'(?:autodiscover|auto-discover|Auto-discover)': 'Autodiscover|automatically detect'}` +- `{'(?:autodiscovered|auto-discovered|Auto-discovered)': 'Autodiscovered|automatically detected'}` **Ignore Case:** False -### Rule names should avoid weak works like '%s' +### Missing ™ on phrase '%s' **Level:** *error* -[Link](https://developers.google.com/tech-writing/one/clear-sentences) +[Link](https://www.datadoghq.com) **Tokens:** -- `was` -- `were` -- `is` -- `are` +- `(? `unfamiliar` -- `unusual` -> `unfamiliar` -- `new` -> `unfamiliar` -**Ignore Case:** True +## SIEM-Names -### Rule names should not be longer than 10 words +### Rule names should use sentence case **Level:** *error* -**Ignore Case:** False +**Exceptions:** +- `1Password` +- `Advanced Protection` +- `Autoscaling Group` +- `Amazon EC2 Instance` +- `Amazon S3` +- `API calls` +- `Auth0 Attack Protection` +- `Auth0 Breached Password Detection` +- `Auth0 Brute Force Protection` +- `Auth0 Guardian MFA` +- `Auth0 Suspicious IP Throttling` +- `AWS Cloudtrail GetCallerIdentity` +- `AWS DescribeInstances` +- `AWS IAM User created with AdministratorAccess policy attached` +- `AWS ConsoleLogin` +- `AWS Console login without MFA` +- `AWS GuardDuty` +- `AWS IAM Roles Anywhere` +- `AWS Kinesis Firehose` +- `AWS Lambda` +- `AWS Network Gateway` +- `AWS Secrets Manager` +- `AWS Systems Manager` +- `AWS Verified Access` +- `AWS VPC Flow Log` +- `Azure Active Directory` +- `Azure AD Identity Protection` +- `Azure AD Privileged Identity Management` +- `CloudTrail` +- `Cloudflare` +- `Cloudflare CASB Finding` +- `Cloudflare L7 DDOS` +- `Crowdstrike Alerts` +- `Enterprise Organization` +- `GitHub` +- `GitHub Advanced Security` +- `GitHub Dependabot` +- `GitHub Personal Access Token` +- `GitHub Secret Scanning` +- `Google App Engine` +- `Google Cloud` +- `Google Cloud IAM Role updated` +- `Google Cloud Storage` +- `Google Cloud Storage Bucket` +- `Google Compute` +- `Google Compute Engine` +- `Google Drive` +- `Google Security Command Center` +- `Google Workspace` +- `IdP configuration changed` +- `Impossible Travel Auth0` +- `IoC` +- `Jamf Protect` +- `Microsoft 365 Application Impersonation` +- `Microsoft 365 Default or Anonymous` +- `Microsoft 365 E-Discovery` +- `Microsoft 365 Exchange` +- `Microsoft 365 Full Access` +- `Microsoft 365 Inbound Connector` +- `Microsoft 365 OneDrive` +- `Microsoft 365 Security and Compliance` +- `Microsoft 365 SendAs` +- `Microsoft Defender for Cloud` +- `Microsoft Intune Enterprise MDM` +- `Microsoft Teams` +- `Okta` +- `Okta Identity Provider` +- `Palo Alto Networks Firewall` +- `RDS Snapshot` +- `Scout Suite` +- `Sqreen` +- `Tor` +- `TruffleHog` +- `Zendesk Automatic Redaction` diff --git a/styles/Datadog/test.yml b/styles/Datadog/test.yml new file mode 100644 index 0000000..41b1722 --- /dev/null +++ b/styles/Datadog/test.yml @@ -0,0 +1,12 @@ +extends: existence +message: "Brett Test 2" +link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes" +nonword: true +level: warning +action: + name: edit + params: + - remove + - ' ' +tokens: + - '\s[—–]\s' diff --git a/styles/Datadog/test3.yml b/styles/Datadog/test3.yml new file mode 100644 index 0000000..a8e1f39 --- /dev/null +++ b/styles/Datadog/test3.yml @@ -0,0 +1,12 @@ +extends: existence +message: "Brett Test 3" +link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes" +nonword: true +level: warning +action: + name: edit + params: + - remove + - ' ' +tokens: + - '\s[—–]\s' From 3cddfee4fe59f647e6793bcd6e41acd598d1845f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 18:40:20 +0000 Subject: [PATCH 15/51] Update rules overview Markdown --- rules_overview.md | 764 +++++++++++++++++++++++----------------------- 1 file changed, 382 insertions(+), 382 deletions(-) diff --git a/rules_overview.md b/rules_overview.md index e33c8ba..6ddea83 100644 --- a/rules_overview.md +++ b/rules_overview.md @@ -5,11 +5,14 @@ This page provides a comprehensive list of the Vale linter rules used in Datadog Last Updated: 2024-03-18 ## Table of Contents -- [CWS-Descriptions](#cws-descriptions) -- [CWS-Names](#cws-names) - [Vocab](#vocab) -- [Datadog](#datadog) +- [CWS-Descriptions](#cws-descriptions) - [SIEM-Names](#siem-names) +- [Datadog](#datadog) +- [CWS-Names](#cws-names) + +## Vocab + ## CWS-Descriptions @@ -23,65 +26,278 @@ Last Updated: 2024-03-18 **Ignore Case:** False -## CWS-Names +## SIEM-Names -### Rule names should avoid weak works like '%s' +### Rule names should use sentence case **Level:** *error* -[Link](https://developers.google.com/tech-writing/one/clear-sentences) +**Exceptions:** +- `1Password` +- `Advanced Protection` +- `Autoscaling Group` +- `Amazon EC2 Instance` +- `Amazon S3` +- `API calls` +- `Auth0 Attack Protection` +- `Auth0 Breached Password Detection` +- `Auth0 Brute Force Protection` +- `Auth0 Guardian MFA` +- `Auth0 Suspicious IP Throttling` +- `AWS Cloudtrail GetCallerIdentity` +- `AWS DescribeInstances` +- `AWS IAM User created with AdministratorAccess policy attached` +- `AWS ConsoleLogin` +- `AWS Console login without MFA` +- `AWS GuardDuty` +- `AWS IAM Roles Anywhere` +- `AWS Kinesis Firehose` +- `AWS Lambda` +- `AWS Network Gateway` +- `AWS Secrets Manager` +- `AWS Systems Manager` +- `AWS Verified Access` +- `AWS VPC Flow Log` +- `Azure Active Directory` +- `Azure AD Identity Protection` +- `Azure AD Privileged Identity Management` +- `CloudTrail` +- `Cloudflare` +- `Cloudflare CASB Finding` +- `Cloudflare L7 DDOS` +- `Crowdstrike Alerts` +- `Enterprise Organization` +- `GitHub` +- `GitHub Advanced Security` +- `GitHub Dependabot` +- `GitHub Personal Access Token` +- `GitHub Secret Scanning` +- `Google App Engine` +- `Google Cloud` +- `Google Cloud IAM Role updated` +- `Google Cloud Storage` +- `Google Cloud Storage Bucket` +- `Google Compute` +- `Google Compute Engine` +- `Google Drive` +- `Google Security Command Center` +- `Google Workspace` +- `IdP configuration changed` +- `Impossible Travel Auth0` +- `IoC` +- `Jamf Protect` +- `Microsoft 365 Application Impersonation` +- `Microsoft 365 Default or Anonymous` +- `Microsoft 365 E-Discovery` +- `Microsoft 365 Exchange` +- `Microsoft 365 Full Access` +- `Microsoft 365 Inbound Connector` +- `Microsoft 365 OneDrive` +- `Microsoft 365 Security and Compliance` +- `Microsoft 365 SendAs` +- `Microsoft Defender for Cloud` +- `Microsoft Intune Enterprise MDM` +- `Microsoft Teams` +- `Okta` +- `Okta Identity Provider` +- `Palo Alto Networks Firewall` +- `RDS Snapshot` +- `Scout Suite` +- `Sqreen` +- `Tor` +- `TruffleHog` +- `Zendesk Automatic Redaction` -**Tokens:** -- `was` -- `were` -- `is` -- `are` -**Ignore Case:** True +## Datadog -### Rule names should not be longer than 10 words +### Use '%s' instead of '%s'. **Level:** *error* -**Ignore Case:** False - -### Rule names should not start with '%s' +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) -**Level:** *error* +**Swap:** +- `black ?list` -> `disallow list|exclude list` +- `master` -> `primary` +- `slave` -> `secondary` +- `white ?list` -> `allow list|include list` -**Tokens:** -- `A` -- `An` -- `The` +**Ignore Case:** True -**Ignore Case:** False +### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. -### New Value rules should use '%s' instead of '%s' +**Level:** *warning* -**Level:** *error* +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) **Swap:** -- `unrecognized` -> `unfamiliar` -- `unusual` -> `unfamiliar` -- `new` -> `unfamiliar` +- `\[here\]\(.*?\)` -> `here` +- `\s*here\s*` -> `here` +- `\[this\]\(.*?\)` -> `this` +- `\s*this\s*` -> `this` +- `\[page\]\(.*?\)` -> `page` +- `\s*page\s*` -> `page` +- `\[this page\]\(.*?\)` -> `this page` +- `\s*this page\s*` -> `this page` **Ignore Case:** True -### Rule names should use sentence case +### Use '%s' instead of '%s'. -**Level:** *error* +**Level:** *warning* -**Exceptions:** -- `OverlayFS` -- `DNS` -- `TXT` -- `Kubernetes` +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `a number of` -> `few|several|many` +- `acknowledgement` -> `acknowledgment` +- `App Analytics` -> `Tracing without Limits™` +- `auto(?:\s|-)complete` -> `autocomplete` +- `auto(?:\s|-)completion` -> `autocompletion` +- `Availability Zone` -> `availability zone` +- `Availability Zones` -> `availability zones` +- `back(?:\s|-)end` -> `backend` +- `back(?:\s|-)ends` -> `backends` +- `bear in mind` -> `keep in mind` +- `boolean` -> `Boolean` +- `booleans` -> `Booleans` +- `cheat sheet` -> `cheatsheet` +- `command line interface` -> `command-line interface` +- `Create a new` -> `Create a|Create an` +- `culprit` -> `cause` +- `data are` -> `data is` +- `data(?:\s|-)point` -> `datapoint` +- `data(?:\s|-)points` -> `datapoints` +- `data(?:\s|-)set` -> `dataset` +- `data(?:\s|-)sets` -> `datasets` +- `data-?center` -> `data center` +- `data-?centers` -> `data centers` +- `Datadog (?:app|application)` -> `Datadog|Datadog site` +- `Datadog product` -> `Datadog|Datadog service` +- `data-?source` -> `data source` +- `data-?sources` -> `data sources` +- `default (?:dash|screen)board` -> `out-of-the-box dashboard` +- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` +- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` +- `drill (?:down|into)` -> `examine|investigate|analyze` +- `drilling (?:down|into)` -> `examining|investigating|analyzing` +- `Distributed Tracing` -> `distributed tracing` +- `(?:easy|easily)` -> `` +- `e-?book` -> `eBook` +- `e-?books` -> `eBooks` +- `e-mail` -> `email` +- `e-mailing` -> `emailing` +- `e-mails` -> `emails` +- `end(?:\s|-)point` -> `endpoint` +- `end(?:\s|-)points` -> `endpoints` +- `event (?:stream|streem)` -> `Event Stream` +- `flame-?graph` -> `flame graph` +- `flame-?graphs` -> `flame graphs` +- `figure out` -> `determine` +- `figuring out` -> `determining` +- `file(?:\s|-)name` -> `filename` +- `file(?:\s|-)names` -> `filenames` +- `filesystem` -> `file system` +- `filesystems` -> `file systems` +- `fine\s?-?tune` -> `customize|optimize|refine` +- `for the most part` -> `generally|usually` +- `front(?:\s|-)end` -> `frontend` +- `health-?check` -> `heath check` +- `health-?checks` -> `heath checks` +- `(?:heat-?map|Heat Map)` -> `heat map` +- `(?:heat-?maps|Heat Maps)` -> `heat maps` +- `(?:host-?map|Host Map)` -> `host map` +- `(?:host-?maps|Host Maps)` -> `host maps` +- `hone in` -> `home in` +- `hones in` -> `homes in` +- `honing in` -> `homing in` +- `highly` -> `` +- `hit` -> `click|select` +- `in order to` -> `to` +- `in sync` -> `in-sync` +- `In sync` -> `In-sync` +- `indices` -> `indexes` +- `indexation` -> `indexing` +- `infrastructures` -> `infrastructure` +- `install command` -> `installation command` +- `Internet` -> `internet` +- `(?:i/?-?o|I-?O)` -> `I/O` +- `(?:i/?ops|I/OPS)` -> `IOPS` +- `just` -> `` +- `keep in mind` -> `consider` +- `left up to` -> `determined by` +- `let's assume` -> `assuming|for example, if` +- `load-?balancing` -> `load balancing` +- `machine-?learning` -> `machine learning` +- `micro(?:\s|-)service` -> `microservice` +- `micro(?:\s|-)services` -> `microservices` +- `multi-?alert` -> `multi alert` +- `multicloud` -> `multi-cloud` +- `multiline` -> `multi-line` +- `Note that` -> `**Note**:` +- `(?:obvious|obviously|Obviously)` -> `` +- `off-line` -> `offline` +- `on the fly` -> `real-time|in real time` +- `Once` -> `After` +- `open-?source` -> `open source` +- `page view` -> `pageview` +- `page views` -> `pageviews` +- `play a hand` -> `influence` +- `please` -> `` +- `pre-connect` -> `preconnect` +- `quick|quickly` -> `` +- `screen(?:\s|-)board` -> `screenboard` +- `simple|simply` -> `` +- `single pane of glass` -> `single view|single place|single page` +- `slice and dice` -> `filter and group` +- `stand for` -> `represent|mean` +- `Synthetics` -> `Synthetic Monitoring` +- `reenable` -> `re-enable` +- `run(?:\s|-)time` -> `runtime` +- `refer to|visit` -> `see|read|follow` +- `time board` -> `timeboard` +- `time(?:\s|-)series` -> `timeseries` +- `time-?frame` -> `time frame` +- `time-?frames` -> `time frames` +- `top-?list` -> `top list` +- `trade(?:\s|-)off` -> `trade-off` +- `Trace Search and Analytics` -> `Tracing without Limits™` +- `turnkey` -> `ready to use` +- `under the hood` -> `` +- `utilize` -> `use` +- `very` -> `` +- `via` -> `with|through` +- `visit` -> `see|read` +- `webserver` -> `web server` +- `web site` -> `website` +- `X-axis` -> `x-axis` +- `Y-axis` -> `y-axis` +- `(?:github|Github)` -> `GitHub` +- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` +- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` +- `memcached` -> `Memcached` +- `(?:nginx|Nginx)` -> `NGINX` +- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` +- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` +- `prometheus` -> `Prometheus` +- `(?:sql|Sql)` -> `SQL` +- `(?:statsd|statsD|Statsd)` -> `StatsD` +- `(?:unix|Unix)` -> `UNIX` +**Ignore Case:** False -## Vocab +### Use '%s' instead of abbreviations like '%s'. +**Level:** *warning* -## Datadog +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) + +**Swap:** +- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` +- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` + +**Ignore Case:** True ### '%s' should use sentence-style capitalization. @@ -354,237 +570,21 @@ Last Updated: 2024-03-18 - `Xray` - `ZooKeeper` -### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) - -**Swap:** -- `\[here\]\(.*?\)` -> `here` -- `\s*here\s*` -> `here` -- `\[this\]\(.*?\)` -> `this` -- `\s*this\s*` -> `this` -- `\[page\]\(.*?\)` -> `page` -- `\s*page\s*` -> `page` -- `\[this page\]\(.*?\)` -> `this page` -- `\s*this page\s*` -> `this page` - -**Ignore Case:** True - -### Use a gender-neutral pronoun instead of '%s'. - -**Level:** *error* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#gender) - -**Tokens:** -- `he/she` -- `s/he` -- `\(s\)he` -- `\bhe\b` -- `\bhim\b` -- `\bhis\b` -- `\bshe\b` -- `\bher\b` - -**Ignore Case:** True - -### Avoid first-person pronouns such as '%s'. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#pronouns) - -**Tokens:** -- `(?<=^|\s)I(?=\s)` -- `(?<=^|\s)I,(?=\s)` -- `\bI'm\b` -- `(?<=\s)[Mm]e\b` -- `(?<=\s)[Mm]y\b` -- `(?<=\s)[Mm]ine\b` -- `(?<=\s)[Ww]e\b` -- `we'(?:ve|re)` -- `(?<=\s)[Uu]s\b` -- `(?<=\s)[Oo]ur\b` -- `\blet's\b` - -### Use straight quotes instead of smart quotes. - -**Level:** *error* - -**Tokens:** -- `“` -- `”` -- `‘` -- `’` - -### Don't put a space before or after a dash. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) - -**Tokens:** -- `\s[—–]\s` - -### Use '%s' instead of '%s'. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) - -**Swap:** -- `a number of` -> `few|several|many` -- `acknowledgement` -> `acknowledgment` -- `App Analytics` -> `Tracing without Limits™` -- `auto(?:\s|-)complete` -> `autocomplete` -- `auto(?:\s|-)completion` -> `autocompletion` -- `Availability Zone` -> `availability zone` -- `Availability Zones` -> `availability zones` -- `back(?:\s|-)end` -> `backend` -- `back(?:\s|-)ends` -> `backends` -- `bear in mind` -> `keep in mind` -- `boolean` -> `Boolean` -- `booleans` -> `Booleans` -- `cheat sheet` -> `cheatsheet` -- `command line interface` -> `command-line interface` -- `Create a new` -> `Create a|Create an` -- `culprit` -> `cause` -- `data are` -> `data is` -- `data(?:\s|-)point` -> `datapoint` -- `data(?:\s|-)points` -> `datapoints` -- `data(?:\s|-)set` -> `dataset` -- `data(?:\s|-)sets` -> `datasets` -- `data-?center` -> `data center` -- `data-?centers` -> `data centers` -- `Datadog (?:app|application)` -> `Datadog|Datadog site` -- `Datadog product` -> `Datadog|Datadog service` -- `data-?source` -> `data source` -- `data-?sources` -> `data sources` -- `default (?:dash|screen)board` -> `out-of-the-box dashboard` -- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` -- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` -- `drill (?:down|into)` -> `examine|investigate|analyze` -- `drilling (?:down|into)` -> `examining|investigating|analyzing` -- `Distributed Tracing` -> `distributed tracing` -- `(?:easy|easily)` -> `` -- `e-?book` -> `eBook` -- `e-?books` -> `eBooks` -- `e-mail` -> `email` -- `e-mailing` -> `emailing` -- `e-mails` -> `emails` -- `end(?:\s|-)point` -> `endpoint` -- `end(?:\s|-)points` -> `endpoints` -- `event (?:stream|streem)` -> `Event Stream` -- `flame-?graph` -> `flame graph` -- `flame-?graphs` -> `flame graphs` -- `figure out` -> `determine` -- `figuring out` -> `determining` -- `file(?:\s|-)name` -> `filename` -- `file(?:\s|-)names` -> `filenames` -- `filesystem` -> `file system` -- `filesystems` -> `file systems` -- `fine\s?-?tune` -> `customize|optimize|refine` -- `for the most part` -> `generally|usually` -- `front(?:\s|-)end` -> `frontend` -- `health-?check` -> `heath check` -- `health-?checks` -> `heath checks` -- `(?:heat-?map|Heat Map)` -> `heat map` -- `(?:heat-?maps|Heat Maps)` -> `heat maps` -- `(?:host-?map|Host Map)` -> `host map` -- `(?:host-?maps|Host Maps)` -> `host maps` -- `hone in` -> `home in` -- `hones in` -> `homes in` -- `honing in` -> `homing in` -- `highly` -> `` -- `hit` -> `click|select` -- `in order to` -> `to` -- `in sync` -> `in-sync` -- `In sync` -> `In-sync` -- `indices` -> `indexes` -- `indexation` -> `indexing` -- `infrastructures` -> `infrastructure` -- `install command` -> `installation command` -- `Internet` -> `internet` -- `(?:i/?-?o|I-?O)` -> `I/O` -- `(?:i/?ops|I/OPS)` -> `IOPS` -- `just` -> `` -- `keep in mind` -> `consider` -- `left up to` -> `determined by` -- `let's assume` -> `assuming|for example, if` -- `load-?balancing` -> `load balancing` -- `machine-?learning` -> `machine learning` -- `micro(?:\s|-)service` -> `microservice` -- `micro(?:\s|-)services` -> `microservices` -- `multi-?alert` -> `multi alert` -- `multicloud` -> `multi-cloud` -- `multiline` -> `multi-line` -- `Note that` -> `**Note**:` -- `(?:obvious|obviously|Obviously)` -> `` -- `off-line` -> `offline` -- `on the fly` -> `real-time|in real time` -- `Once` -> `After` -- `open-?source` -> `open source` -- `page view` -> `pageview` -- `page views` -> `pageviews` -- `play a hand` -> `influence` -- `please` -> `` -- `pre-connect` -> `preconnect` -- `quick|quickly` -> `` -- `screen(?:\s|-)board` -> `screenboard` -- `simple|simply` -> `` -- `single pane of glass` -> `single view|single place|single page` -- `slice and dice` -> `filter and group` -- `stand for` -> `represent|mean` -- `Synthetics` -> `Synthetic Monitoring` -- `reenable` -> `re-enable` -- `run(?:\s|-)time` -> `runtime` -- `refer to|visit` -> `see|read|follow` -- `time board` -> `timeboard` -- `time(?:\s|-)series` -> `timeseries` -- `time-?frame` -> `time frame` -- `time-?frames` -> `time frames` -- `top-?list` -> `top list` -- `trade(?:\s|-)off` -> `trade-off` -- `Trace Search and Analytics` -> `Tracing without Limits™` -- `turnkey` -> `ready to use` -- `under the hood` -> `` -- `utilize` -> `use` -- `very` -> `` -- `via` -> `with|through` -- `visit` -> `see|read` -- `webserver` -> `web server` -- `web site` -> `website` -- `X-axis` -> `x-axis` -- `Y-axis` -> `y-axis` -- `(?:github|Github)` -> `GitHub` -- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` -- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` -- `memcached` -> `Memcached` -- `(?:nginx|Nginx)` -> `NGINX` -- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` -- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` -- `prometheus` -> `Prometheus` -- `(?:sql|Sql)` -> `SQL` -- `(?:statsd|statsD|Statsd)` -> `StatsD` -- `(?:unix|Unix)` -> `UNIX` - -**Ignore Case:** False - -### Use '%s' instead of abbreviations like '%s'. +### Missing ™ on phrase '%s' -**Level:** *warning* +**Level:** *error* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) +[Link](https://www.datadoghq.com) -**Swap:** -- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` -- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` +**Tokens:** +- `(? `disallow list|exclude list` -- `master` -> `primary` -- `slave` -> `secondary` -- `white ?list` -> `allow list|include list` +**Tokens:** +- `currently` +- `now` +- `will` +- `won't` +- `[a-zA-Z]*'ll` **Ignore Case:** True @@ -673,23 +674,65 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Brett Test 3 +### Avoid first-person pronouns such as '%s'. **Level:** *warning* +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#pronouns) + +**Tokens:** +- `(?<=^|\s)I(?=\s)` +- `(?<=^|\s)I,(?=\s)` +- `\bI'm\b` +- `(?<=\s)[Mm]e\b` +- `(?<=\s)[Mm]y\b` +- `(?<=\s)[Mm]ine\b` +- `(?<=\s)[Ww]e\b` +- `we'(?:ve|re)` +- `(?<=\s)[Uu]s\b` +- `(?<=\s)[Oo]ur\b` +- `\blet's\b` + +### Avoid en dashes ('–'). For hyphenated words, use a hyphen ('-'). +For parenthesis, use an em dash ('—'). + +**Level:** *error* + [Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) **Tokens:** -- `\s[—–]\s` +- `–` -### Use the Oxford comma in '%s'. +### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s'. -**Level:** *suggestion* +**Level:** *warning* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#commas) +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `{'(?:autodiscovery|auto-discovery|Auto-discovery)': 'Autodiscovery|automatic detection'}` +- `{'(?:autodiscover|auto-discover|Auto-discover)': 'Autodiscover|automatically detect'}` +- `{'(?:autodiscovered|auto-discovered|Auto-discovered)': 'Autodiscovered|automatically detected'}` + +**Ignore Case:** False + +### Use a gender-neutral pronoun instead of '%s'. + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#gender) **Tokens:** -- `(?:[^,]+,){1,}\s\w+\s(?:and|or)` +- `he/she` +- `s/he` +- `\(s\)he` +- `\bhe\b` +- `\bhim\b` +- `\bhis\b` +- `\bshe\b` +- `\bher\b` + +**Ignore Case:** True ### Use only one space between words and sentences (not two). @@ -700,21 +743,24 @@ Last Updated: 2024-03-18 **Tokens:** - `[\w.?!,\(\)\-":] {2,}[\w.?!,\(\)\-":]` -### Try to keep your sentence length to 25 words or fewer. +### Brett Test 2 -**Level:** *suggestion* +**Level:** *warning* -**Ignore Case:** False +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) -### Avoid en dashes ('–'). For hyphenated words, use a hyphen ('-'). -For parenthesis, use an em dash ('—'). +**Tokens:** +- `\s[—–]\s` -**Level:** *error* +### Use straight quotes instead of smart quotes. -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) +**Level:** *error* **Tokens:** -- `–` +- `“` +- `”` +- `‘` +- `’` ### Format times as 'HOUR:MINUTE a.m.' or HOUR:MINUTE p.m.' instead of '%s'. @@ -727,128 +773,82 @@ For parenthesis, use an em dash ('—'). - `(1[012]|[1-9]):[0-5][0-9] (?i)(a\.m[^\.]|p\.m[^\.])` - `(1[012]|[1-9]):[0-5][0-9][ ]?(?i)(am|pm)` -### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s'. +### Use the Oxford comma in '%s'. + +**Level:** *suggestion* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#commas) + +**Tokens:** +- `(?:[^,]+,){1,}\s\w+\s(?:and|or)` + +### Don't put a space before or after a dash. **Level:** *warning* -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) -**Swap:** -- `{'(?:autodiscovery|auto-discovery|Auto-discovery)': 'Autodiscovery|automatic detection'}` -- `{'(?:autodiscover|auto-discover|Auto-discover)': 'Autodiscover|automatically detect'}` -- `{'(?:autodiscovered|auto-discovered|Auto-discovered)': 'Autodiscovered|automatically detected'}` +**Tokens:** +- `\s[—–]\s` + +### Try to keep your sentence length to 25 words or fewer. + +**Level:** *suggestion* **Ignore Case:** False -### Missing ™ on phrase '%s' -**Level:** *error* +## CWS-Names -[Link](https://www.datadoghq.com) +### Rule names should not start with '%s' + +**Level:** *error* **Tokens:** -- `(? `unfamiliar` +- `unusual` -> `unfamiliar` +- `new` -> `unfamiliar` + +**Ignore Case:** True + +### Rule names should not be longer than 10 words + +**Level:** *error* + +**Ignore Case:** False From 6943335a2088674a11333afbbecc103542400328 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 12:42:05 -0600 Subject: [PATCH 16/51] Test edit. --- styles/Datadog/test3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/Datadog/test3.yml b/styles/Datadog/test3.yml index a8e1f39..5bbf92f 100644 --- a/styles/Datadog/test3.yml +++ b/styles/Datadog/test3.yml @@ -1,5 +1,5 @@ extends: existence -message: "Brett Test 3" +message: "Brett Test 3 (test edit)" link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes" nonword: true level: warning From c3850634b2560b2a2b2bcaa8330f752fee90b72c Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 12:46:32 -0600 Subject: [PATCH 17/51] Add rules_overview to gitignore. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7e5928b..db19737 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ Docshtml.zip Docsmd.zip -.DS_Store \ No newline at end of file +.DS_Store +rules_overview \ No newline at end of file From 35f1d11daa1f687758539269ea13fd7bcfbe4ac1 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 12:46:51 -0600 Subject: [PATCH 18/51] Add rules_overview to gitignore. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index db19737..6fc6b92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ Docshtml.zip Docsmd.zip .DS_Store -rules_overview \ No newline at end of file +rules_overview.md \ No newline at end of file From 84cae7d01286121ac07042e65f0ec7c9bf94be92 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 18:47:36 +0000 Subject: [PATCH 19/51] Update rules overview Markdown --- rules_overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules_overview.md b/rules_overview.md index 6ddea83..225e116 100644 --- a/rules_overview.md +++ b/rules_overview.md @@ -584,7 +584,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Brett Test 3 +### Brett Test 3 (test edit) **Level:** *warning* From cc003fc64642a3428a60b009e7a907500ce3590e Mon Sep 17 00:00:00 2001 From: Rosa Trieu Date: Mon, 18 Mar 2024 11:43:42 -0700 Subject: [PATCH 20/51] Fix small typo in contributing.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8b0473d..ae81cc9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ Are you interested in contributing your team's product-specific terminology and 1. Create a folder such as `[Product Name]-Names` and add it to the [`Styles/Datadog` folder][4]. 2. Update the [CODEOWNERS file][5] with your team's GitHub handle. -3. Update the `StylesPath` to point to the approriate directory in your team repository's [`.vale.ini` file][6]. +3. Update the `StylesPath` to point to the appropriate directory in your team repository's [`.vale.ini` file][6]. In order to ease and speed up our review, here are some items you can check for when submitting your pull request: From 3f9f0fe3d47575c9a822e895bccbb658b4862597 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:21:32 -0600 Subject: [PATCH 21/51] Update action name. --- .github/workflows/generate-overview.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/generate-overview.yml b/.github/workflows/generate-overview.yml index baad09a..ee3eb9e 100644 --- a/.github/workflows/generate-overview.yml +++ b/.github/workflows/generate-overview.yml @@ -1,10 +1,10 @@ -name: Update Rule Overview Page +name: Update Rules Page on: push: branches: - main - - brett0000FF/generate-rules-page + - brett0000FF/generate-rules-page ##remove paths: - 'styles/**' - '.github/workflows/generate-overview.yml' @@ -34,5 +34,5 @@ jobs: git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add rules_overview.md - git commit -m "Update rules overview Markdown" || echo "No changes to commit" + git commit -m "Update rules page." || echo "No changes to commit." git push From e3b080b4fad7470a448d0b0b5fd77069e336583e Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:25:49 -0600 Subject: [PATCH 22/51] Tweak names and output. --- ...generate-overview.yml => update-rules.yml} | 4 +- rules_overview.md | 854 ------------------ ...erate-overview.py => update-rules-page.py} | 4 +- 3 files changed, 4 insertions(+), 858 deletions(-) rename .github/workflows/{generate-overview.yml => update-rules.yml} (89%) delete mode 100644 rules_overview.md rename scripts/{generate-overview.py => update-rules-page.py} (96%) diff --git a/.github/workflows/generate-overview.yml b/.github/workflows/update-rules.yml similarity index 89% rename from .github/workflows/generate-overview.yml rename to .github/workflows/update-rules.yml index ee3eb9e..33a5930 100644 --- a/.github/workflows/generate-overview.yml +++ b/.github/workflows/update-rules.yml @@ -7,7 +7,7 @@ on: - brett0000FF/generate-rules-page ##remove paths: - 'styles/**' - - '.github/workflows/generate-overview.yml' + - '.github/workflows/update-rules.yml' jobs: generate_markdown: @@ -27,7 +27,7 @@ jobs: pip install pyyaml - name: Run script to generate Markdown - run: python scripts/generate-overview.py + run: python scripts/update-rules-page.py - name: Commit and push changes run: | diff --git a/rules_overview.md b/rules_overview.md deleted file mode 100644 index 225e116..0000000 --- a/rules_overview.md +++ /dev/null @@ -1,854 +0,0 @@ -# Vale Linter Rules - -This page provides a comprehensive list of the Vale linter rules used in Datadog documentation. - -Last Updated: 2024-03-18 - -## Table of Contents -- [Vocab](#vocab) -- [CWS-Descriptions](#cws-descriptions) -- [SIEM-Names](#siem-names) -- [Datadog](#datadog) -- [CWS-Names](#cws-names) - -## Vocab - - -## CWS-Descriptions - -### Refer to the 'Datadog %s' instead of the 'Datadog %s' - -**Level:** *error* - -**Swap:** -- `agent` -> `Agent` - -**Ignore Case:** False - - -## SIEM-Names - -### Rule names should use sentence case - -**Level:** *error* - -**Exceptions:** -- `1Password` -- `Advanced Protection` -- `Autoscaling Group` -- `Amazon EC2 Instance` -- `Amazon S3` -- `API calls` -- `Auth0 Attack Protection` -- `Auth0 Breached Password Detection` -- `Auth0 Brute Force Protection` -- `Auth0 Guardian MFA` -- `Auth0 Suspicious IP Throttling` -- `AWS Cloudtrail GetCallerIdentity` -- `AWS DescribeInstances` -- `AWS IAM User created with AdministratorAccess policy attached` -- `AWS ConsoleLogin` -- `AWS Console login without MFA` -- `AWS GuardDuty` -- `AWS IAM Roles Anywhere` -- `AWS Kinesis Firehose` -- `AWS Lambda` -- `AWS Network Gateway` -- `AWS Secrets Manager` -- `AWS Systems Manager` -- `AWS Verified Access` -- `AWS VPC Flow Log` -- `Azure Active Directory` -- `Azure AD Identity Protection` -- `Azure AD Privileged Identity Management` -- `CloudTrail` -- `Cloudflare` -- `Cloudflare CASB Finding` -- `Cloudflare L7 DDOS` -- `Crowdstrike Alerts` -- `Enterprise Organization` -- `GitHub` -- `GitHub Advanced Security` -- `GitHub Dependabot` -- `GitHub Personal Access Token` -- `GitHub Secret Scanning` -- `Google App Engine` -- `Google Cloud` -- `Google Cloud IAM Role updated` -- `Google Cloud Storage` -- `Google Cloud Storage Bucket` -- `Google Compute` -- `Google Compute Engine` -- `Google Drive` -- `Google Security Command Center` -- `Google Workspace` -- `IdP configuration changed` -- `Impossible Travel Auth0` -- `IoC` -- `Jamf Protect` -- `Microsoft 365 Application Impersonation` -- `Microsoft 365 Default or Anonymous` -- `Microsoft 365 E-Discovery` -- `Microsoft 365 Exchange` -- `Microsoft 365 Full Access` -- `Microsoft 365 Inbound Connector` -- `Microsoft 365 OneDrive` -- `Microsoft 365 Security and Compliance` -- `Microsoft 365 SendAs` -- `Microsoft Defender for Cloud` -- `Microsoft Intune Enterprise MDM` -- `Microsoft Teams` -- `Okta` -- `Okta Identity Provider` -- `Palo Alto Networks Firewall` -- `RDS Snapshot` -- `Scout Suite` -- `Sqreen` -- `Tor` -- `TruffleHog` -- `Zendesk Automatic Redaction` - - -## Datadog - -### Use '%s' instead of '%s'. - -**Level:** *error* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) - -**Swap:** -- `black ?list` -> `disallow list|exclude list` -- `master` -> `primary` -- `slave` -> `secondary` -- `white ?list` -> `allow list|include list` - -**Ignore Case:** True - -### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) - -**Swap:** -- `\[here\]\(.*?\)` -> `here` -- `\s*here\s*` -> `here` -- `\[this\]\(.*?\)` -> `this` -- `\s*this\s*` -> `this` -- `\[page\]\(.*?\)` -> `page` -- `\s*page\s*` -> `page` -- `\[this page\]\(.*?\)` -> `this page` -- `\s*this page\s*` -> `this page` - -**Ignore Case:** True - -### Use '%s' instead of '%s'. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) - -**Swap:** -- `a number of` -> `few|several|many` -- `acknowledgement` -> `acknowledgment` -- `App Analytics` -> `Tracing without Limits™` -- `auto(?:\s|-)complete` -> `autocomplete` -- `auto(?:\s|-)completion` -> `autocompletion` -- `Availability Zone` -> `availability zone` -- `Availability Zones` -> `availability zones` -- `back(?:\s|-)end` -> `backend` -- `back(?:\s|-)ends` -> `backends` -- `bear in mind` -> `keep in mind` -- `boolean` -> `Boolean` -- `booleans` -> `Booleans` -- `cheat sheet` -> `cheatsheet` -- `command line interface` -> `command-line interface` -- `Create a new` -> `Create a|Create an` -- `culprit` -> `cause` -- `data are` -> `data is` -- `data(?:\s|-)point` -> `datapoint` -- `data(?:\s|-)points` -> `datapoints` -- `data(?:\s|-)set` -> `dataset` -- `data(?:\s|-)sets` -> `datasets` -- `data-?center` -> `data center` -- `data-?centers` -> `data centers` -- `Datadog (?:app|application)` -> `Datadog|Datadog site` -- `Datadog product` -> `Datadog|Datadog service` -- `data-?source` -> `data source` -- `data-?sources` -> `data sources` -- `default (?:dash|screen)board` -> `out-of-the-box dashboard` -- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` -- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` -- `drill (?:down|into)` -> `examine|investigate|analyze` -- `drilling (?:down|into)` -> `examining|investigating|analyzing` -- `Distributed Tracing` -> `distributed tracing` -- `(?:easy|easily)` -> `` -- `e-?book` -> `eBook` -- `e-?books` -> `eBooks` -- `e-mail` -> `email` -- `e-mailing` -> `emailing` -- `e-mails` -> `emails` -- `end(?:\s|-)point` -> `endpoint` -- `end(?:\s|-)points` -> `endpoints` -- `event (?:stream|streem)` -> `Event Stream` -- `flame-?graph` -> `flame graph` -- `flame-?graphs` -> `flame graphs` -- `figure out` -> `determine` -- `figuring out` -> `determining` -- `file(?:\s|-)name` -> `filename` -- `file(?:\s|-)names` -> `filenames` -- `filesystem` -> `file system` -- `filesystems` -> `file systems` -- `fine\s?-?tune` -> `customize|optimize|refine` -- `for the most part` -> `generally|usually` -- `front(?:\s|-)end` -> `frontend` -- `health-?check` -> `heath check` -- `health-?checks` -> `heath checks` -- `(?:heat-?map|Heat Map)` -> `heat map` -- `(?:heat-?maps|Heat Maps)` -> `heat maps` -- `(?:host-?map|Host Map)` -> `host map` -- `(?:host-?maps|Host Maps)` -> `host maps` -- `hone in` -> `home in` -- `hones in` -> `homes in` -- `honing in` -> `homing in` -- `highly` -> `` -- `hit` -> `click|select` -- `in order to` -> `to` -- `in sync` -> `in-sync` -- `In sync` -> `In-sync` -- `indices` -> `indexes` -- `indexation` -> `indexing` -- `infrastructures` -> `infrastructure` -- `install command` -> `installation command` -- `Internet` -> `internet` -- `(?:i/?-?o|I-?O)` -> `I/O` -- `(?:i/?ops|I/OPS)` -> `IOPS` -- `just` -> `` -- `keep in mind` -> `consider` -- `left up to` -> `determined by` -- `let's assume` -> `assuming|for example, if` -- `load-?balancing` -> `load balancing` -- `machine-?learning` -> `machine learning` -- `micro(?:\s|-)service` -> `microservice` -- `micro(?:\s|-)services` -> `microservices` -- `multi-?alert` -> `multi alert` -- `multicloud` -> `multi-cloud` -- `multiline` -> `multi-line` -- `Note that` -> `**Note**:` -- `(?:obvious|obviously|Obviously)` -> `` -- `off-line` -> `offline` -- `on the fly` -> `real-time|in real time` -- `Once` -> `After` -- `open-?source` -> `open source` -- `page view` -> `pageview` -- `page views` -> `pageviews` -- `play a hand` -> `influence` -- `please` -> `` -- `pre-connect` -> `preconnect` -- `quick|quickly` -> `` -- `screen(?:\s|-)board` -> `screenboard` -- `simple|simply` -> `` -- `single pane of glass` -> `single view|single place|single page` -- `slice and dice` -> `filter and group` -- `stand for` -> `represent|mean` -- `Synthetics` -> `Synthetic Monitoring` -- `reenable` -> `re-enable` -- `run(?:\s|-)time` -> `runtime` -- `refer to|visit` -> `see|read|follow` -- `time board` -> `timeboard` -- `time(?:\s|-)series` -> `timeseries` -- `time-?frame` -> `time frame` -- `time-?frames` -> `time frames` -- `top-?list` -> `top list` -- `trade(?:\s|-)off` -> `trade-off` -- `Trace Search and Analytics` -> `Tracing without Limits™` -- `turnkey` -> `ready to use` -- `under the hood` -> `` -- `utilize` -> `use` -- `very` -> `` -- `via` -> `with|through` -- `visit` -> `see|read` -- `webserver` -> `web server` -- `web site` -> `website` -- `X-axis` -> `x-axis` -- `Y-axis` -> `y-axis` -- `(?:github|Github)` -> `GitHub` -- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` -- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` -- `memcached` -> `Memcached` -- `(?:nginx|Nginx)` -> `NGINX` -- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` -- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` -- `prometheus` -> `Prometheus` -- `(?:sql|Sql)` -> `SQL` -- `(?:statsd|statsD|Statsd)` -> `StatsD` -- `(?:unix|Unix)` -> `UNIX` - -**Ignore Case:** False - -### Use '%s' instead of abbreviations like '%s'. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) - -**Swap:** -- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` -- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` - -**Ignore Case:** True - -### '%s' should use sentence-style capitalization. - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#headers) - -**Exceptions:** -- `ACLs` -- `ActiveMQ XML Integration` -- `Agent` -- `Agentless` -- `Agents` -- `Airflow` -- `Amazon` -- `Amazon Web Services` -- `APCu` -- `APIs` -- `APM` -- `Application Performance Monitoring` -- `APM & Continuous Profiler` -- `App Analytics` -- `App Service` -- `AppVeyor` -- `Application Security Management` -- `Application Vulnerability Management` -- `AuthN` -- `Autodiscovery` -- `AWS Step Functions` -- `AWS Systems Manager` -- `Azure` -- `Azure App Service` -- `Azure App Service Plan` -- `Azure Blob Storage` -- `Azure Event Hub` -- `Audit Trail` -- `BitBucket` -- `BuildKite` -- `Browser Monitoring` -- `CakePHP` -- `Cassandra Nodetool` -- `Cassandra Nodetool Integration` -- `CentOS` -- `Chef` -- `CircleCI` -- `CI/CD` -- `CI Visibility` -- `Clipboard` -- `Cloud Cost Management` -- `Cloud Pub Sub` -- `Cloud Security Management` -- `Cloud Security Posture Management` -- `Cloud SIEM` -- `Cloud Workload Security` -- `CloudFormation` -- `CloudSQL` -- `CloudTrail` -- `CloudWatch` -- `Cluster Agent` -- `Continuous Profiler` -- `Continuous Testing` -- `DaemonSet` -- `Data Collected` -- `Database Monitoring` -- `Datadog` -- `DatadogMetric` -- `Datadog Agent Manager` -- `Datadog for Government` -- `Datadog Forwarder` -- `Datadog Lambda Extension` -- `Datadog Operator` -- `Datadog Plugin` -- `Datadog Watchdog` -- `DatadogHook` -- `Debian` -- `Detection Rules` -- `Docker` -- `Docker Compose` -- `Docker Swarm` -- `Dockerfile` -- `DogStatsD` -- `Envoy` -- `Fargate` -- `FastCGI` -- `Firehose Nozzle` -- `FireLens` -- `Fluent Bit` -- `Fluentd` -- `FreeBSD` -- `FreeSwitch` -- `Further Reading` -- `GeoIP` -- `Git` -- `GitHub` -- `GitHub Actions` -- `GitLab` -- `GitLab Runner Integration` -- `Google` -- `Google Analytics` -- `Google Cloud` -- `Google Cloud Functions` -- `GraphQL` -- `Gunicorn` -- `HAProxy` -- `HBase RegionServer Integration` -- `HDFS DataNode Integration` -- `HDFS NameNode Integration` -- `Helm` -- `Heroku` -- `HipChat` -- `HostPort` -- `I` -- `IdP` -- `IDs` -- `iLert` -- `Incident Management` -- `Infrastructure Monitoring` -- `Ingress Controller` -- `Internet Information Services` -- `IoT` -- `IPs` -- `Java` -- `JavaScript` -- `JBoss` -- `Jenkins` -- `JFrog` -- `JFrog Artifactory` -- `Jira` -- `JMXFetch` -- `Journald` -- `Kafka` -- `Kafka Consumer Integration` -- `Kubernetes` -- `Kubernetes Engine` -- `Kubernetes Pod` -- `Kubernetes Service` -- `Lambda` -- `Lambda Layer` -- `Lambda@Edge` -- `LaunchDarkly` -- `Linux` -- `Live Analytics` -- `Live Search` -- `Live Tail` -- `Log Explorer` -- `Log Management` -- `Log Rehydration` -- `Logback` -- `macOS` -- `Marketplace` -- `MarkLogic` -- `Meraki` -- `Mesos Slave Integration` -- `Metrics Explorer` -- `Metrics without Limits` -- `Mobile Monitoring` -- `MongoDB` -- `MsTest` -- `MySQL` -- `Network Address Translation` -- `Network Device Monitoring` -- `Network Performance Monitoring` -- `New Relic` -- `NGINX Plus` -- `NixOS` -- `Node` -- `Notebook` -- `Notebook List` -- `npm` -- `NXLog` -- `Observability Pipelines` -- `OkHttp` -- `OneLogin` -- `OPcache` -- `OpenLDAP` -- `OpenMetrics` -- `OpenShift` -- `OpenStack` -- `openSUSE` -- `OpenTelemetry` -- `OpenTracing` -- `OpenVPN` -- `OpsGenie` -- `OpsWorks` -- `Oracle Instant Client` -- `Phusion Passenger` -- `Pipeline Visibility` -- `Pivotal Platform` -- `Postgres` -- `PostgreSQL` -- `PowerDNS` -- `Prometheus` -- `Prometheus Alertmanager` -- `Puppet` -- `Python` -- `RabbitMQ` -- `Rails` -- `Rancher` -- `Real User Monitoring` -- `Red Hat` -- `Redis` -- `ReplicaSet` -- `RocketPants` -- `Roku Monitoring` -- `Root Cause Analysis` -- `Route53` -- `RSpec` -- `Ruby` -- `RUM` -- `RumMonitor` -- `SafeNet` -- `SaltStack` -- `Security Monitoring` -- `Security Signal` -- `Security Signals` -- `SELinux` -- `Sensitive Data Scanner` -- `Serverless APM` -- `Serverless Framework` -- `Serverless Monitoring` -- `Serverless Workload Monitoring` -- `Service Checks` -- `Session Replay` -- `Siri` -- `Slack` -- `SLIs` -- `SLOs` -- `socat` -- `Social Security` -- `SQL Server` -- `SQLDelight` -- `SQLite` -- `Stackdriver` -- `StackPulse` -- `StackStorm` -- `StatsD` -- `Sumo Logic` -- `Swift` -- `Synthetic Monitoring` -- `Syslog` -- `sysOID` -- `System Core` -- `System Swap` -- `Teamcity` -- `Terraform` -- `Testing Visibility` -- `TokuMX` -- `Tracing Without Limits` -- `Trello` -- `Twilio` -- `TypeScript` -- `Ubuntu` -- `Unified Service Tagging` -- `Unix` -- `Unix Domain Socket` -- `URLs` -- `User Datagram Protocol` -- `USM` -- `Universal Service Monitoring` -- `Varnish` -- `Vector` -- `Vertica` -- `VMWare` -- `vSphere` -- `Watchdog` -- `Watchdog Insights` -- `Webhook` -- `WildFly` -- `Windows` -- `Xray` -- `ZooKeeper` - -### Missing ™ on phrase '%s' - -**Level:** *error* - -[Link](https://www.datadoghq.com) - -**Tokens:** -- `(? `unfamiliar` -- `unusual` -> `unfamiliar` -- `new` -> `unfamiliar` - -**Ignore Case:** True - -### Rule names should not be longer than 10 words - -**Level:** *error* - -**Ignore Case:** False - diff --git a/scripts/generate-overview.py b/scripts/update-rules-page.py similarity index 96% rename from scripts/generate-overview.py rename to scripts/update-rules-page.py index f054301..472afb2 100644 --- a/scripts/generate-overview.py +++ b/scripts/update-rules-page.py @@ -53,7 +53,7 @@ def main(): style_folders = [folder for folder in os.listdir(styles_folder) if os.path.isdir(os.path.join(styles_folder, folder))] - markdown_content = "# Vale Linter Rules\n\n" + markdown_content = "# Vale Rules Overview\n\n" markdown_content += "This page provides a comprehensive list of the Vale linter rules used in Datadog documentation.\n\n" markdown_content += f"Last Updated: {datetime.now().strftime('%Y-%m-%d')}\n\n" markdown_content += generate_table_of_contents(style_folders) @@ -63,7 +63,7 @@ def main(): markdown_content += f"\n## {style_folder}\n\n" markdown_content += process_subfolder(subfolder_path) - with open('rules_overview.md', 'w') as file: + with open('RULES.md', 'w') as file: file.write(markdown_content) if __name__ == '__main__': From 37c971849adc8f13ec8f4a0e0d10d849f358d366 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:27:10 -0600 Subject: [PATCH 23/51] Fix name. --- .gitattributes | 2 +- .github/workflows/update-rules.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index 841456b..faa3394 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -rules_overview.md linguist-generated=true \ No newline at end of file +RULES.md linguist-generated=true \ No newline at end of file diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 33a5930..500123c 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -33,6 +33,6 @@ jobs: run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git add rules_overview.md + git add RULES.md git commit -m "Update rules page." || echo "No changes to commit." git push From 7078a179fae6a1a57848ddd6d663d6c735bc7ef7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 21:27:42 +0000 Subject: [PATCH 24/51] Update rules page. --- RULES.md | 854 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 854 insertions(+) create mode 100644 RULES.md diff --git a/RULES.md b/RULES.md new file mode 100644 index 0000000..d154ace --- /dev/null +++ b/RULES.md @@ -0,0 +1,854 @@ +# Vale Rules Overview + +This page provides a comprehensive list of the Vale linter rules used in Datadog documentation. + +Last Updated: 2024-03-18 + +## Table of Contents +- [Vocab](#vocab) +- [CWS-Descriptions](#cws-descriptions) +- [SIEM-Names](#siem-names) +- [Datadog](#datadog) +- [CWS-Names](#cws-names) + +## Vocab + + +## CWS-Descriptions + +### Refer to the 'Datadog %s' instead of the 'Datadog %s' + +**Level:** *error* + +**Swap:** +- `agent` -> `Agent` + +**Ignore Case:** False + + +## SIEM-Names + +### Rule names should use sentence case + +**Level:** *error* + +**Exceptions:** +- `1Password` +- `Advanced Protection` +- `Autoscaling Group` +- `Amazon EC2 Instance` +- `Amazon S3` +- `API calls` +- `Auth0 Attack Protection` +- `Auth0 Breached Password Detection` +- `Auth0 Brute Force Protection` +- `Auth0 Guardian MFA` +- `Auth0 Suspicious IP Throttling` +- `AWS Cloudtrail GetCallerIdentity` +- `AWS DescribeInstances` +- `AWS IAM User created with AdministratorAccess policy attached` +- `AWS ConsoleLogin` +- `AWS Console login without MFA` +- `AWS GuardDuty` +- `AWS IAM Roles Anywhere` +- `AWS Kinesis Firehose` +- `AWS Lambda` +- `AWS Network Gateway` +- `AWS Secrets Manager` +- `AWS Systems Manager` +- `AWS Verified Access` +- `AWS VPC Flow Log` +- `Azure Active Directory` +- `Azure AD Identity Protection` +- `Azure AD Privileged Identity Management` +- `CloudTrail` +- `Cloudflare` +- `Cloudflare CASB Finding` +- `Cloudflare L7 DDOS` +- `Crowdstrike Alerts` +- `Enterprise Organization` +- `GitHub` +- `GitHub Advanced Security` +- `GitHub Dependabot` +- `GitHub Personal Access Token` +- `GitHub Secret Scanning` +- `Google App Engine` +- `Google Cloud` +- `Google Cloud IAM Role updated` +- `Google Cloud Storage` +- `Google Cloud Storage Bucket` +- `Google Compute` +- `Google Compute Engine` +- `Google Drive` +- `Google Security Command Center` +- `Google Workspace` +- `IdP configuration changed` +- `Impossible Travel Auth0` +- `IoC` +- `Jamf Protect` +- `Microsoft 365 Application Impersonation` +- `Microsoft 365 Default or Anonymous` +- `Microsoft 365 E-Discovery` +- `Microsoft 365 Exchange` +- `Microsoft 365 Full Access` +- `Microsoft 365 Inbound Connector` +- `Microsoft 365 OneDrive` +- `Microsoft 365 Security and Compliance` +- `Microsoft 365 SendAs` +- `Microsoft Defender for Cloud` +- `Microsoft Intune Enterprise MDM` +- `Microsoft Teams` +- `Okta` +- `Okta Identity Provider` +- `Palo Alto Networks Firewall` +- `RDS Snapshot` +- `Scout Suite` +- `Sqreen` +- `Tor` +- `TruffleHog` +- `Zendesk Automatic Redaction` + + +## Datadog + +### Use '%s' instead of '%s'. + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) + +**Swap:** +- `black ?list` -> `disallow list|exclude list` +- `master` -> `primary` +- `slave` -> `secondary` +- `white ?list` -> `allow list|include list` + +**Ignore Case:** True + +### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) + +**Swap:** +- `\[here\]\(.*?\)` -> `here` +- `\s*here\s*` -> `here` +- `\[this\]\(.*?\)` -> `this` +- `\s*this\s*` -> `this` +- `\[page\]\(.*?\)` -> `page` +- `\s*page\s*` -> `page` +- `\[this page\]\(.*?\)` -> `this page` +- `\s*this page\s*` -> `this page` + +**Ignore Case:** True + +### Use '%s' instead of '%s'. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `a number of` -> `few|several|many` +- `acknowledgement` -> `acknowledgment` +- `App Analytics` -> `Tracing without Limits™` +- `auto(?:\s|-)complete` -> `autocomplete` +- `auto(?:\s|-)completion` -> `autocompletion` +- `Availability Zone` -> `availability zone` +- `Availability Zones` -> `availability zones` +- `back(?:\s|-)end` -> `backend` +- `back(?:\s|-)ends` -> `backends` +- `bear in mind` -> `keep in mind` +- `boolean` -> `Boolean` +- `booleans` -> `Booleans` +- `cheat sheet` -> `cheatsheet` +- `command line interface` -> `command-line interface` +- `Create a new` -> `Create a|Create an` +- `culprit` -> `cause` +- `data are` -> `data is` +- `data(?:\s|-)point` -> `datapoint` +- `data(?:\s|-)points` -> `datapoints` +- `data(?:\s|-)set` -> `dataset` +- `data(?:\s|-)sets` -> `datasets` +- `data-?center` -> `data center` +- `data-?centers` -> `data centers` +- `Datadog (?:app|application)` -> `Datadog|Datadog site` +- `Datadog product` -> `Datadog|Datadog service` +- `data-?source` -> `data source` +- `data-?sources` -> `data sources` +- `default (?:dash|screen)board` -> `out-of-the-box dashboard` +- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` +- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` +- `drill (?:down|into)` -> `examine|investigate|analyze` +- `drilling (?:down|into)` -> `examining|investigating|analyzing` +- `Distributed Tracing` -> `distributed tracing` +- `(?:easy|easily)` -> `` +- `e-?book` -> `eBook` +- `e-?books` -> `eBooks` +- `e-mail` -> `email` +- `e-mailing` -> `emailing` +- `e-mails` -> `emails` +- `end(?:\s|-)point` -> `endpoint` +- `end(?:\s|-)points` -> `endpoints` +- `event (?:stream|streem)` -> `Event Stream` +- `flame-?graph` -> `flame graph` +- `flame-?graphs` -> `flame graphs` +- `figure out` -> `determine` +- `figuring out` -> `determining` +- `file(?:\s|-)name` -> `filename` +- `file(?:\s|-)names` -> `filenames` +- `filesystem` -> `file system` +- `filesystems` -> `file systems` +- `fine\s?-?tune` -> `customize|optimize|refine` +- `for the most part` -> `generally|usually` +- `front(?:\s|-)end` -> `frontend` +- `health-?check` -> `heath check` +- `health-?checks` -> `heath checks` +- `(?:heat-?map|Heat Map)` -> `heat map` +- `(?:heat-?maps|Heat Maps)` -> `heat maps` +- `(?:host-?map|Host Map)` -> `host map` +- `(?:host-?maps|Host Maps)` -> `host maps` +- `hone in` -> `home in` +- `hones in` -> `homes in` +- `honing in` -> `homing in` +- `highly` -> `` +- `hit` -> `click|select` +- `in order to` -> `to` +- `in sync` -> `in-sync` +- `In sync` -> `In-sync` +- `indices` -> `indexes` +- `indexation` -> `indexing` +- `infrastructures` -> `infrastructure` +- `install command` -> `installation command` +- `Internet` -> `internet` +- `(?:i/?-?o|I-?O)` -> `I/O` +- `(?:i/?ops|I/OPS)` -> `IOPS` +- `just` -> `` +- `keep in mind` -> `consider` +- `left up to` -> `determined by` +- `let's assume` -> `assuming|for example, if` +- `load-?balancing` -> `load balancing` +- `machine-?learning` -> `machine learning` +- `micro(?:\s|-)service` -> `microservice` +- `micro(?:\s|-)services` -> `microservices` +- `multi-?alert` -> `multi alert` +- `multicloud` -> `multi-cloud` +- `multiline` -> `multi-line` +- `Note that` -> `**Note**:` +- `(?:obvious|obviously|Obviously)` -> `` +- `off-line` -> `offline` +- `on the fly` -> `real-time|in real time` +- `Once` -> `After` +- `open-?source` -> `open source` +- `page view` -> `pageview` +- `page views` -> `pageviews` +- `play a hand` -> `influence` +- `please` -> `` +- `pre-connect` -> `preconnect` +- `quick|quickly` -> `` +- `screen(?:\s|-)board` -> `screenboard` +- `simple|simply` -> `` +- `single pane of glass` -> `single view|single place|single page` +- `slice and dice` -> `filter and group` +- `stand for` -> `represent|mean` +- `Synthetics` -> `Synthetic Monitoring` +- `reenable` -> `re-enable` +- `run(?:\s|-)time` -> `runtime` +- `refer to|visit` -> `see|read|follow` +- `time board` -> `timeboard` +- `time(?:\s|-)series` -> `timeseries` +- `time-?frame` -> `time frame` +- `time-?frames` -> `time frames` +- `top-?list` -> `top list` +- `trade(?:\s|-)off` -> `trade-off` +- `Trace Search and Analytics` -> `Tracing without Limits™` +- `turnkey` -> `ready to use` +- `under the hood` -> `` +- `utilize` -> `use` +- `very` -> `` +- `via` -> `with|through` +- `visit` -> `see|read` +- `webserver` -> `web server` +- `web site` -> `website` +- `X-axis` -> `x-axis` +- `Y-axis` -> `y-axis` +- `(?:github|Github)` -> `GitHub` +- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` +- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` +- `memcached` -> `Memcached` +- `(?:nginx|Nginx)` -> `NGINX` +- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` +- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` +- `prometheus` -> `Prometheus` +- `(?:sql|Sql)` -> `SQL` +- `(?:statsd|statsD|Statsd)` -> `StatsD` +- `(?:unix|Unix)` -> `UNIX` + +**Ignore Case:** False + +### Use '%s' instead of abbreviations like '%s'. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) + +**Swap:** +- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` +- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` + +**Ignore Case:** True + +### '%s' should use sentence-style capitalization. + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#headers) + +**Exceptions:** +- `ACLs` +- `ActiveMQ XML Integration` +- `Agent` +- `Agentless` +- `Agents` +- `Airflow` +- `Amazon` +- `Amazon Web Services` +- `APCu` +- `APIs` +- `APM` +- `Application Performance Monitoring` +- `APM & Continuous Profiler` +- `App Analytics` +- `App Service` +- `AppVeyor` +- `Application Security Management` +- `Application Vulnerability Management` +- `AuthN` +- `Autodiscovery` +- `AWS Step Functions` +- `AWS Systems Manager` +- `Azure` +- `Azure App Service` +- `Azure App Service Plan` +- `Azure Blob Storage` +- `Azure Event Hub` +- `Audit Trail` +- `BitBucket` +- `BuildKite` +- `Browser Monitoring` +- `CakePHP` +- `Cassandra Nodetool` +- `Cassandra Nodetool Integration` +- `CentOS` +- `Chef` +- `CircleCI` +- `CI/CD` +- `CI Visibility` +- `Clipboard` +- `Cloud Cost Management` +- `Cloud Pub Sub` +- `Cloud Security Management` +- `Cloud Security Posture Management` +- `Cloud SIEM` +- `Cloud Workload Security` +- `CloudFormation` +- `CloudSQL` +- `CloudTrail` +- `CloudWatch` +- `Cluster Agent` +- `Continuous Profiler` +- `Continuous Testing` +- `DaemonSet` +- `Data Collected` +- `Database Monitoring` +- `Datadog` +- `DatadogMetric` +- `Datadog Agent Manager` +- `Datadog for Government` +- `Datadog Forwarder` +- `Datadog Lambda Extension` +- `Datadog Operator` +- `Datadog Plugin` +- `Datadog Watchdog` +- `DatadogHook` +- `Debian` +- `Detection Rules` +- `Docker` +- `Docker Compose` +- `Docker Swarm` +- `Dockerfile` +- `DogStatsD` +- `Envoy` +- `Fargate` +- `FastCGI` +- `Firehose Nozzle` +- `FireLens` +- `Fluent Bit` +- `Fluentd` +- `FreeBSD` +- `FreeSwitch` +- `Further Reading` +- `GeoIP` +- `Git` +- `GitHub` +- `GitHub Actions` +- `GitLab` +- `GitLab Runner Integration` +- `Google` +- `Google Analytics` +- `Google Cloud` +- `Google Cloud Functions` +- `GraphQL` +- `Gunicorn` +- `HAProxy` +- `HBase RegionServer Integration` +- `HDFS DataNode Integration` +- `HDFS NameNode Integration` +- `Helm` +- `Heroku` +- `HipChat` +- `HostPort` +- `I` +- `IdP` +- `IDs` +- `iLert` +- `Incident Management` +- `Infrastructure Monitoring` +- `Ingress Controller` +- `Internet Information Services` +- `IoT` +- `IPs` +- `Java` +- `JavaScript` +- `JBoss` +- `Jenkins` +- `JFrog` +- `JFrog Artifactory` +- `Jira` +- `JMXFetch` +- `Journald` +- `Kafka` +- `Kafka Consumer Integration` +- `Kubernetes` +- `Kubernetes Engine` +- `Kubernetes Pod` +- `Kubernetes Service` +- `Lambda` +- `Lambda Layer` +- `Lambda@Edge` +- `LaunchDarkly` +- `Linux` +- `Live Analytics` +- `Live Search` +- `Live Tail` +- `Log Explorer` +- `Log Management` +- `Log Rehydration` +- `Logback` +- `macOS` +- `Marketplace` +- `MarkLogic` +- `Meraki` +- `Mesos Slave Integration` +- `Metrics Explorer` +- `Metrics without Limits` +- `Mobile Monitoring` +- `MongoDB` +- `MsTest` +- `MySQL` +- `Network Address Translation` +- `Network Device Monitoring` +- `Network Performance Monitoring` +- `New Relic` +- `NGINX Plus` +- `NixOS` +- `Node` +- `Notebook` +- `Notebook List` +- `npm` +- `NXLog` +- `Observability Pipelines` +- `OkHttp` +- `OneLogin` +- `OPcache` +- `OpenLDAP` +- `OpenMetrics` +- `OpenShift` +- `OpenStack` +- `openSUSE` +- `OpenTelemetry` +- `OpenTracing` +- `OpenVPN` +- `OpsGenie` +- `OpsWorks` +- `Oracle Instant Client` +- `Phusion Passenger` +- `Pipeline Visibility` +- `Pivotal Platform` +- `Postgres` +- `PostgreSQL` +- `PowerDNS` +- `Prometheus` +- `Prometheus Alertmanager` +- `Puppet` +- `Python` +- `RabbitMQ` +- `Rails` +- `Rancher` +- `Real User Monitoring` +- `Red Hat` +- `Redis` +- `ReplicaSet` +- `RocketPants` +- `Roku Monitoring` +- `Root Cause Analysis` +- `Route53` +- `RSpec` +- `Ruby` +- `RUM` +- `RumMonitor` +- `SafeNet` +- `SaltStack` +- `Security Monitoring` +- `Security Signal` +- `Security Signals` +- `SELinux` +- `Sensitive Data Scanner` +- `Serverless APM` +- `Serverless Framework` +- `Serverless Monitoring` +- `Serverless Workload Monitoring` +- `Service Checks` +- `Session Replay` +- `Siri` +- `Slack` +- `SLIs` +- `SLOs` +- `socat` +- `Social Security` +- `SQL Server` +- `SQLDelight` +- `SQLite` +- `Stackdriver` +- `StackPulse` +- `StackStorm` +- `StatsD` +- `Sumo Logic` +- `Swift` +- `Synthetic Monitoring` +- `Syslog` +- `sysOID` +- `System Core` +- `System Swap` +- `Teamcity` +- `Terraform` +- `Testing Visibility` +- `TokuMX` +- `Tracing Without Limits` +- `Trello` +- `Twilio` +- `TypeScript` +- `Ubuntu` +- `Unified Service Tagging` +- `Unix` +- `Unix Domain Socket` +- `URLs` +- `User Datagram Protocol` +- `USM` +- `Universal Service Monitoring` +- `Varnish` +- `Vector` +- `Vertica` +- `VMWare` +- `vSphere` +- `Watchdog` +- `Watchdog Insights` +- `Webhook` +- `WildFly` +- `Windows` +- `Xray` +- `ZooKeeper` + +### Missing ™ on phrase '%s' + +**Level:** *error* + +[Link](https://www.datadoghq.com) + +**Tokens:** +- `(? `unfamiliar` +- `unusual` -> `unfamiliar` +- `new` -> `unfamiliar` + +**Ignore Case:** True + +### Rule names should not be longer than 10 words + +**Level:** *error* + +**Ignore Case:** False + From ff6b7c73112a295efe2adcfedacc3281ac5d42c2 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:31:41 -0600 Subject: [PATCH 25/51] Update commit message. --- .github/workflows/update-rules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 500123c..46f4086 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -34,5 +34,6 @@ jobs: git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add RULES.md - git commit -m "Update rules page." || echo "No changes to commit." + TIMESTAMP=$(date -u +"%Y-%m-%d UTC") + git commit -m "Update RULES.md - $TIMESTAMP." || echo "No changes to commit." git push From 7d780c45da61d3275bcfa3f8ec021786bfa3959b Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:34:49 -0600 Subject: [PATCH 26/51] Test. --- styles/Datadog/test3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/Datadog/test3.yml b/styles/Datadog/test3.yml index 5bbf92f..a00e39d 100644 --- a/styles/Datadog/test3.yml +++ b/styles/Datadog/test3.yml @@ -1,5 +1,5 @@ extends: existence -message: "Brett Test 3 (test edit)" +message: "Brett Test!" link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes" nonword: true level: warning From 351bb5aa3703ddede8f23bc7b54fce4e23678dcd Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 21:35:20 +0000 Subject: [PATCH 27/51] Update RULES.md - 2024-03-18 UTC. --- RULES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RULES.md b/RULES.md index d154ace..af7dcf6 100644 --- a/RULES.md +++ b/RULES.md @@ -584,7 +584,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Brett Test 3 (test edit) +### Brett Test! **Level:** *warning* From 25f08e6fe931473560b21b59661fbea7227d3b91 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:52:24 -0600 Subject: [PATCH 28/51] Add description field. --- .github/workflows/update-rules.yml | 2 +- scripts/update-rules-page.py | 6 ++++-- styles/Datadog/abbreviations.yml | 1 + styles/Datadog/americanspelling.yml | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 46f4086..e52aa0c 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -34,6 +34,6 @@ jobs: git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add RULES.md - TIMESTAMP=$(date -u +"%Y-%m-%d UTC") + TIMESTAMP=$(date -u +"%Y-%m-%d") git commit -m "Update RULES.md - $TIMESTAMP." || echo "No changes to commit." git push diff --git a/scripts/update-rules-page.py b/scripts/update-rules-page.py index 472afb2..27678b2 100644 --- a/scripts/update-rules-page.py +++ b/scripts/update-rules-page.py @@ -3,8 +3,10 @@ from datetime import datetime def generate_rule_markdown(rule_data): - message = rule_data['message'] - markdown = f"### {message}\n\n" + + ## Use description field if it exists; if not, use message field + description = rule_data.get('description', rule_data['message']) + markdown = f"### {description}\n\n" markdown += f"**Level:** *{rule_data['level']}*\n\n" if 'link' in rule_data: diff --git a/styles/Datadog/abbreviations.yml b/styles/Datadog/abbreviations.yml index bcd2163..ce733d5 100644 --- a/styles/Datadog/abbreviations.yml +++ b/styles/Datadog/abbreviations.yml @@ -1,4 +1,5 @@ extends: substitution +description: Don't use Latin abbreviations message: "Use '%s' instead of abbreviations like '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations" ignorecase: true diff --git a/styles/Datadog/americanspelling.yml b/styles/Datadog/americanspelling.yml index 415b8e6..9618399 100644 --- a/styles/Datadog/americanspelling.yml +++ b/styles/Datadog/americanspelling.yml @@ -1,4 +1,5 @@ extends: existence +description: Use American spelling message: "In general, use American spelling instead of '%s'." link: 'https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md' ignorecase: true From eef861fa3ed1468afb5aeea8cb65743617d52f01 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:53:40 -0600 Subject: [PATCH 29/51] Update gitignore. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6fc6b92..0d2ead0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ Docshtml.zip Docsmd.zip .DS_Store -rules_overview.md \ No newline at end of file +RULES.md \ No newline at end of file From 6da2896828ac790201875e46e6dcfbac12799ee5 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 21:55:53 +0000 Subject: [PATCH 30/51] Update RULES.md - 2024-03-18. --- RULES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RULES.md b/RULES.md index af7dcf6..752a9d1 100644 --- a/RULES.md +++ b/RULES.md @@ -287,7 +287,7 @@ Last Updated: 2024-03-18 **Ignore Case:** False -### Use '%s' instead of abbreviations like '%s'. +### Don't use Latin abbreviations **Level:** *warning* @@ -608,7 +608,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### In general, use American spelling instead of '%s'. +### Use American spelling **Level:** *warning* From f524ab70f17afcae9bb9932a4c21b4424402d2ed Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 15:59:46 -0600 Subject: [PATCH 31/51] Add description. --- styles/Datadog/inclusive.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/styles/Datadog/inclusive.yml b/styles/Datadog/inclusive.yml index bc1a9df..956add1 100644 --- a/styles/Datadog/inclusive.yml +++ b/styles/Datadog/inclusive.yml @@ -1,4 +1,5 @@ extends: substitution +description: Use inclusive language. message: "Use '%s' instead of '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language" ignorecase: true From 633843fdc778b964d83ad9f300d2145ef59b88ea Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 22:00:29 +0000 Subject: [PATCH 32/51] Update RULES.md - 2024-03-18. --- RULES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RULES.md b/RULES.md index 752a9d1..31a3e94 100644 --- a/RULES.md +++ b/RULES.md @@ -111,7 +111,7 @@ Last Updated: 2024-03-18 ## Datadog -### Use '%s' instead of '%s'. +### Use inclusive language. **Level:** *error* From 1d39a21735fd2acefe44803b107487dcc4601715 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:09:52 -0600 Subject: [PATCH 33/51] Update to on pull request. --- .github/workflows/update-rules.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index e52aa0c..58f0968 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -1,10 +1,9 @@ name: Update Rules Page on: - push: + pull_request: branches: - - main - - brett0000FF/generate-rules-page ##remove + - [main] paths: - 'styles/**' - '.github/workflows/update-rules.yml' From 024c46e3dc99ca49352e9dad942dfa6fbf250c72 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:13:22 -0600 Subject: [PATCH 34/51] Debug. --- .github/workflows/update-rules.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 58f0968..1c97653 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -2,8 +2,7 @@ name: Update Rules Page on: pull_request: - branches: - - [main] + branches: [main] paths: - 'styles/**' - '.github/workflows/update-rules.yml' From 77dbe8ce8cac15946ee0fbfb24866331bb6b0578 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:16:35 -0600 Subject: [PATCH 35/51] Specify branch. --- .github/workflows/update-rules.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 1c97653..2fe04a5 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -34,4 +34,4 @@ jobs: git add RULES.md TIMESTAMP=$(date -u +"%Y-%m-%d") git commit -m "Update RULES.md - $TIMESTAMP." || echo "No changes to commit." - git push + git push origin HEAD:${{ github.head_ref }} From f0004b2dc30e5a4a19e01a400a0f7e87f0294aeb Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:20:10 -0600 Subject: [PATCH 36/51] Pull before push. --- .github/workflows/update-rules.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 2fe04a5..723dc90 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -34,4 +34,5 @@ jobs: git add RULES.md TIMESTAMP=$(date -u +"%Y-%m-%d") git commit -m "Update RULES.md - $TIMESTAMP." || echo "No changes to commit." + git pull origin ${{ github.head_ref }} git push origin HEAD:${{ github.head_ref }} From 167d79682ab091323581786a8c8afdc255cb7c3a Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:23:02 -0600 Subject: [PATCH 37/51] Configure rebase. --- .github/workflows/update-rules.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 723dc90..3bead6c 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -34,5 +34,6 @@ jobs: git add RULES.md TIMESTAMP=$(date -u +"%Y-%m-%d") git commit -m "Update RULES.md - $TIMESTAMP." || echo "No changes to commit." + git config pull.rebase true git pull origin ${{ github.head_ref }} git push origin HEAD:${{ github.head_ref }} From 15794560d6f714cd34ef9849463eca25e923856f Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:33:09 -0600 Subject: [PATCH 38/51] Remove trailing periods in messages. --- scripts/update-rules-page.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/update-rules-page.py b/scripts/update-rules-page.py index 27678b2..e5c3354 100644 --- a/scripts/update-rules-page.py +++ b/scripts/update-rules-page.py @@ -3,9 +3,9 @@ from datetime import datetime def generate_rule_markdown(rule_data): - + ## Use description field if it exists; if not, use message field - description = rule_data.get('description', rule_data['message']) + description = rule_data.get('description', rule_data['message'].rstrip('.')) markdown = f"### {description}\n\n" markdown += f"**Level:** *{rule_data['level']}*\n\n" From 25c280cb6436fbc4d84fc93de81da45098029685 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 22:33:36 +0000 Subject: [PATCH 39/51] Update RULES.md - 2024-03-18. --- RULES.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/RULES.md b/RULES.md index 31a3e94..bb1bd30 100644 --- a/RULES.md +++ b/RULES.md @@ -125,7 +125,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Avoid vague text in links like '%s' unless you can pair it with more descriptive text. +### Avoid vague text in links like '%s' unless you can pair it with more descriptive text **Level:** *warning* @@ -143,7 +143,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Use '%s' instead of '%s'. +### Use '%s' instead of '%s' **Level:** *warning* @@ -299,7 +299,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### '%s' should use sentence-style capitalization. +### '%s' should use sentence-style capitalization **Level:** *warning* @@ -593,7 +593,7 @@ Last Updated: 2024-03-18 **Tokens:** - `\s[—–]\s` -### Avoid temporal words like '%s'. +### Avoid temporal words like '%s' **Level:** *warning* @@ -674,7 +674,7 @@ Last Updated: 2024-03-18 **Ignore Case:** True -### Avoid first-person pronouns such as '%s'. +### Avoid first-person pronouns such as '%s' **Level:** *warning* @@ -694,7 +694,7 @@ Last Updated: 2024-03-18 - `\blet's\b` ### Avoid en dashes ('–'). For hyphenated words, use a hyphen ('-'). -For parenthesis, use an em dash ('—'). +For parenthesis, use an em dash ('—') **Level:** *error* @@ -703,7 +703,7 @@ For parenthesis, use an em dash ('—'). **Tokens:** - `–` -### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s'. +### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s' **Level:** *warning* @@ -716,7 +716,7 @@ For parenthesis, use an em dash ('—'). **Ignore Case:** False -### Use a gender-neutral pronoun instead of '%s'. +### Use a gender-neutral pronoun instead of '%s' **Level:** *error* @@ -734,7 +734,7 @@ For parenthesis, use an em dash ('—'). **Ignore Case:** True -### Use only one space between words and sentences (not two). +### Use only one space between words and sentences (not two) **Level:** *error* @@ -752,7 +752,7 @@ For parenthesis, use an em dash ('—'). **Tokens:** - `\s[—–]\s` -### Use straight quotes instead of smart quotes. +### Use straight quotes instead of smart quotes **Level:** *error* @@ -762,7 +762,7 @@ For parenthesis, use an em dash ('—'). - `‘` - `’` -### Format times as 'HOUR:MINUTE a.m.' or HOUR:MINUTE p.m.' instead of '%s'. +### Format times as 'HOUR:MINUTE a.m.' or HOUR:MINUTE p.m.' instead of '%s' **Level:** *warning* @@ -773,7 +773,7 @@ For parenthesis, use an em dash ('—'). - `(1[012]|[1-9]):[0-5][0-9] (?i)(a\.m[^\.]|p\.m[^\.])` - `(1[012]|[1-9]):[0-5][0-9][ ]?(?i)(am|pm)` -### Use the Oxford comma in '%s'. +### Use the Oxford comma in '%s' **Level:** *suggestion* @@ -782,7 +782,7 @@ For parenthesis, use an em dash ('—'). **Tokens:** - `(?:[^,]+,){1,}\s\w+\s(?:and|or)` -### Don't put a space before or after a dash. +### Don't put a space before or after a dash **Level:** *warning* @@ -791,7 +791,7 @@ For parenthesis, use an em dash ('—'). **Tokens:** - `\s[—–]\s` -### Try to keep your sentence length to 25 words or fewer. +### Try to keep your sentence length to 25 words or fewer **Level:** *suggestion* From d493b3fd139e3a130e2f041fee16732a992ad6bd Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:50:09 -0600 Subject: [PATCH 40/51] Remove test. --- .gitignore | 2 +- RULES.md | 854 ----------------------------------- scripts/update-rules-page.py | 8 +- styles/Datadog/inclusive.yml | 2 +- 4 files changed, 9 insertions(+), 857 deletions(-) delete mode 100644 RULES.md diff --git a/.gitignore b/.gitignore index 0d2ead0..4c138c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ Docshtml.zip Docsmd.zip .DS_Store -RULES.md \ No newline at end of file +/RULES.md \ No newline at end of file diff --git a/RULES.md b/RULES.md deleted file mode 100644 index bb1bd30..0000000 --- a/RULES.md +++ /dev/null @@ -1,854 +0,0 @@ -# Vale Rules Overview - -This page provides a comprehensive list of the Vale linter rules used in Datadog documentation. - -Last Updated: 2024-03-18 - -## Table of Contents -- [Vocab](#vocab) -- [CWS-Descriptions](#cws-descriptions) -- [SIEM-Names](#siem-names) -- [Datadog](#datadog) -- [CWS-Names](#cws-names) - -## Vocab - - -## CWS-Descriptions - -### Refer to the 'Datadog %s' instead of the 'Datadog %s' - -**Level:** *error* - -**Swap:** -- `agent` -> `Agent` - -**Ignore Case:** False - - -## SIEM-Names - -### Rule names should use sentence case - -**Level:** *error* - -**Exceptions:** -- `1Password` -- `Advanced Protection` -- `Autoscaling Group` -- `Amazon EC2 Instance` -- `Amazon S3` -- `API calls` -- `Auth0 Attack Protection` -- `Auth0 Breached Password Detection` -- `Auth0 Brute Force Protection` -- `Auth0 Guardian MFA` -- `Auth0 Suspicious IP Throttling` -- `AWS Cloudtrail GetCallerIdentity` -- `AWS DescribeInstances` -- `AWS IAM User created with AdministratorAccess policy attached` -- `AWS ConsoleLogin` -- `AWS Console login without MFA` -- `AWS GuardDuty` -- `AWS IAM Roles Anywhere` -- `AWS Kinesis Firehose` -- `AWS Lambda` -- `AWS Network Gateway` -- `AWS Secrets Manager` -- `AWS Systems Manager` -- `AWS Verified Access` -- `AWS VPC Flow Log` -- `Azure Active Directory` -- `Azure AD Identity Protection` -- `Azure AD Privileged Identity Management` -- `CloudTrail` -- `Cloudflare` -- `Cloudflare CASB Finding` -- `Cloudflare L7 DDOS` -- `Crowdstrike Alerts` -- `Enterprise Organization` -- `GitHub` -- `GitHub Advanced Security` -- `GitHub Dependabot` -- `GitHub Personal Access Token` -- `GitHub Secret Scanning` -- `Google App Engine` -- `Google Cloud` -- `Google Cloud IAM Role updated` -- `Google Cloud Storage` -- `Google Cloud Storage Bucket` -- `Google Compute` -- `Google Compute Engine` -- `Google Drive` -- `Google Security Command Center` -- `Google Workspace` -- `IdP configuration changed` -- `Impossible Travel Auth0` -- `IoC` -- `Jamf Protect` -- `Microsoft 365 Application Impersonation` -- `Microsoft 365 Default or Anonymous` -- `Microsoft 365 E-Discovery` -- `Microsoft 365 Exchange` -- `Microsoft 365 Full Access` -- `Microsoft 365 Inbound Connector` -- `Microsoft 365 OneDrive` -- `Microsoft 365 Security and Compliance` -- `Microsoft 365 SendAs` -- `Microsoft Defender for Cloud` -- `Microsoft Intune Enterprise MDM` -- `Microsoft Teams` -- `Okta` -- `Okta Identity Provider` -- `Palo Alto Networks Firewall` -- `RDS Snapshot` -- `Scout Suite` -- `Sqreen` -- `Tor` -- `TruffleHog` -- `Zendesk Automatic Redaction` - - -## Datadog - -### Use inclusive language. - -**Level:** *error* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) - -**Swap:** -- `black ?list` -> `disallow list|exclude list` -- `master` -> `primary` -- `slave` -> `secondary` -- `white ?list` -> `allow list|include list` - -**Ignore Case:** True - -### Avoid vague text in links like '%s' unless you can pair it with more descriptive text - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) - -**Swap:** -- `\[here\]\(.*?\)` -> `here` -- `\s*here\s*` -> `here` -- `\[this\]\(.*?\)` -> `this` -- `\s*this\s*` -> `this` -- `\[page\]\(.*?\)` -> `page` -- `\s*page\s*` -> `page` -- `\[this page\]\(.*?\)` -> `this page` -- `\s*this page\s*` -> `this page` - -**Ignore Case:** True - -### Use '%s' instead of '%s' - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) - -**Swap:** -- `a number of` -> `few|several|many` -- `acknowledgement` -> `acknowledgment` -- `App Analytics` -> `Tracing without Limits™` -- `auto(?:\s|-)complete` -> `autocomplete` -- `auto(?:\s|-)completion` -> `autocompletion` -- `Availability Zone` -> `availability zone` -- `Availability Zones` -> `availability zones` -- `back(?:\s|-)end` -> `backend` -- `back(?:\s|-)ends` -> `backends` -- `bear in mind` -> `keep in mind` -- `boolean` -> `Boolean` -- `booleans` -> `Booleans` -- `cheat sheet` -> `cheatsheet` -- `command line interface` -> `command-line interface` -- `Create a new` -> `Create a|Create an` -- `culprit` -> `cause` -- `data are` -> `data is` -- `data(?:\s|-)point` -> `datapoint` -- `data(?:\s|-)points` -> `datapoints` -- `data(?:\s|-)set` -> `dataset` -- `data(?:\s|-)sets` -> `datasets` -- `data-?center` -> `data center` -- `data-?centers` -> `data centers` -- `Datadog (?:app|application)` -> `Datadog|Datadog site` -- `Datadog product` -> `Datadog|Datadog service` -- `data-?source` -> `data source` -- `data-?sources` -> `data sources` -- `default (?:dash|screen)board` -> `out-of-the-box dashboard` -- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` -- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` -- `drill (?:down|into)` -> `examine|investigate|analyze` -- `drilling (?:down|into)` -> `examining|investigating|analyzing` -- `Distributed Tracing` -> `distributed tracing` -- `(?:easy|easily)` -> `` -- `e-?book` -> `eBook` -- `e-?books` -> `eBooks` -- `e-mail` -> `email` -- `e-mailing` -> `emailing` -- `e-mails` -> `emails` -- `end(?:\s|-)point` -> `endpoint` -- `end(?:\s|-)points` -> `endpoints` -- `event (?:stream|streem)` -> `Event Stream` -- `flame-?graph` -> `flame graph` -- `flame-?graphs` -> `flame graphs` -- `figure out` -> `determine` -- `figuring out` -> `determining` -- `file(?:\s|-)name` -> `filename` -- `file(?:\s|-)names` -> `filenames` -- `filesystem` -> `file system` -- `filesystems` -> `file systems` -- `fine\s?-?tune` -> `customize|optimize|refine` -- `for the most part` -> `generally|usually` -- `front(?:\s|-)end` -> `frontend` -- `health-?check` -> `heath check` -- `health-?checks` -> `heath checks` -- `(?:heat-?map|Heat Map)` -> `heat map` -- `(?:heat-?maps|Heat Maps)` -> `heat maps` -- `(?:host-?map|Host Map)` -> `host map` -- `(?:host-?maps|Host Maps)` -> `host maps` -- `hone in` -> `home in` -- `hones in` -> `homes in` -- `honing in` -> `homing in` -- `highly` -> `` -- `hit` -> `click|select` -- `in order to` -> `to` -- `in sync` -> `in-sync` -- `In sync` -> `In-sync` -- `indices` -> `indexes` -- `indexation` -> `indexing` -- `infrastructures` -> `infrastructure` -- `install command` -> `installation command` -- `Internet` -> `internet` -- `(?:i/?-?o|I-?O)` -> `I/O` -- `(?:i/?ops|I/OPS)` -> `IOPS` -- `just` -> `` -- `keep in mind` -> `consider` -- `left up to` -> `determined by` -- `let's assume` -> `assuming|for example, if` -- `load-?balancing` -> `load balancing` -- `machine-?learning` -> `machine learning` -- `micro(?:\s|-)service` -> `microservice` -- `micro(?:\s|-)services` -> `microservices` -- `multi-?alert` -> `multi alert` -- `multicloud` -> `multi-cloud` -- `multiline` -> `multi-line` -- `Note that` -> `**Note**:` -- `(?:obvious|obviously|Obviously)` -> `` -- `off-line` -> `offline` -- `on the fly` -> `real-time|in real time` -- `Once` -> `After` -- `open-?source` -> `open source` -- `page view` -> `pageview` -- `page views` -> `pageviews` -- `play a hand` -> `influence` -- `please` -> `` -- `pre-connect` -> `preconnect` -- `quick|quickly` -> `` -- `screen(?:\s|-)board` -> `screenboard` -- `simple|simply` -> `` -- `single pane of glass` -> `single view|single place|single page` -- `slice and dice` -> `filter and group` -- `stand for` -> `represent|mean` -- `Synthetics` -> `Synthetic Monitoring` -- `reenable` -> `re-enable` -- `run(?:\s|-)time` -> `runtime` -- `refer to|visit` -> `see|read|follow` -- `time board` -> `timeboard` -- `time(?:\s|-)series` -> `timeseries` -- `time-?frame` -> `time frame` -- `time-?frames` -> `time frames` -- `top-?list` -> `top list` -- `trade(?:\s|-)off` -> `trade-off` -- `Trace Search and Analytics` -> `Tracing without Limits™` -- `turnkey` -> `ready to use` -- `under the hood` -> `` -- `utilize` -> `use` -- `very` -> `` -- `via` -> `with|through` -- `visit` -> `see|read` -- `webserver` -> `web server` -- `web site` -> `website` -- `X-axis` -> `x-axis` -- `Y-axis` -> `y-axis` -- `(?:github|Github)` -> `GitHub` -- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` -- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` -- `memcached` -> `Memcached` -- `(?:nginx|Nginx)` -> `NGINX` -- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` -- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` -- `prometheus` -> `Prometheus` -- `(?:sql|Sql)` -> `SQL` -- `(?:statsd|statsD|Statsd)` -> `StatsD` -- `(?:unix|Unix)` -> `UNIX` - -**Ignore Case:** False - -### Don't use Latin abbreviations - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) - -**Swap:** -- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` -- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` - -**Ignore Case:** True - -### '%s' should use sentence-style capitalization - -**Level:** *warning* - -[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#headers) - -**Exceptions:** -- `ACLs` -- `ActiveMQ XML Integration` -- `Agent` -- `Agentless` -- `Agents` -- `Airflow` -- `Amazon` -- `Amazon Web Services` -- `APCu` -- `APIs` -- `APM` -- `Application Performance Monitoring` -- `APM & Continuous Profiler` -- `App Analytics` -- `App Service` -- `AppVeyor` -- `Application Security Management` -- `Application Vulnerability Management` -- `AuthN` -- `Autodiscovery` -- `AWS Step Functions` -- `AWS Systems Manager` -- `Azure` -- `Azure App Service` -- `Azure App Service Plan` -- `Azure Blob Storage` -- `Azure Event Hub` -- `Audit Trail` -- `BitBucket` -- `BuildKite` -- `Browser Monitoring` -- `CakePHP` -- `Cassandra Nodetool` -- `Cassandra Nodetool Integration` -- `CentOS` -- `Chef` -- `CircleCI` -- `CI/CD` -- `CI Visibility` -- `Clipboard` -- `Cloud Cost Management` -- `Cloud Pub Sub` -- `Cloud Security Management` -- `Cloud Security Posture Management` -- `Cloud SIEM` -- `Cloud Workload Security` -- `CloudFormation` -- `CloudSQL` -- `CloudTrail` -- `CloudWatch` -- `Cluster Agent` -- `Continuous Profiler` -- `Continuous Testing` -- `DaemonSet` -- `Data Collected` -- `Database Monitoring` -- `Datadog` -- `DatadogMetric` -- `Datadog Agent Manager` -- `Datadog for Government` -- `Datadog Forwarder` -- `Datadog Lambda Extension` -- `Datadog Operator` -- `Datadog Plugin` -- `Datadog Watchdog` -- `DatadogHook` -- `Debian` -- `Detection Rules` -- `Docker` -- `Docker Compose` -- `Docker Swarm` -- `Dockerfile` -- `DogStatsD` -- `Envoy` -- `Fargate` -- `FastCGI` -- `Firehose Nozzle` -- `FireLens` -- `Fluent Bit` -- `Fluentd` -- `FreeBSD` -- `FreeSwitch` -- `Further Reading` -- `GeoIP` -- `Git` -- `GitHub` -- `GitHub Actions` -- `GitLab` -- `GitLab Runner Integration` -- `Google` -- `Google Analytics` -- `Google Cloud` -- `Google Cloud Functions` -- `GraphQL` -- `Gunicorn` -- `HAProxy` -- `HBase RegionServer Integration` -- `HDFS DataNode Integration` -- `HDFS NameNode Integration` -- `Helm` -- `Heroku` -- `HipChat` -- `HostPort` -- `I` -- `IdP` -- `IDs` -- `iLert` -- `Incident Management` -- `Infrastructure Monitoring` -- `Ingress Controller` -- `Internet Information Services` -- `IoT` -- `IPs` -- `Java` -- `JavaScript` -- `JBoss` -- `Jenkins` -- `JFrog` -- `JFrog Artifactory` -- `Jira` -- `JMXFetch` -- `Journald` -- `Kafka` -- `Kafka Consumer Integration` -- `Kubernetes` -- `Kubernetes Engine` -- `Kubernetes Pod` -- `Kubernetes Service` -- `Lambda` -- `Lambda Layer` -- `Lambda@Edge` -- `LaunchDarkly` -- `Linux` -- `Live Analytics` -- `Live Search` -- `Live Tail` -- `Log Explorer` -- `Log Management` -- `Log Rehydration` -- `Logback` -- `macOS` -- `Marketplace` -- `MarkLogic` -- `Meraki` -- `Mesos Slave Integration` -- `Metrics Explorer` -- `Metrics without Limits` -- `Mobile Monitoring` -- `MongoDB` -- `MsTest` -- `MySQL` -- `Network Address Translation` -- `Network Device Monitoring` -- `Network Performance Monitoring` -- `New Relic` -- `NGINX Plus` -- `NixOS` -- `Node` -- `Notebook` -- `Notebook List` -- `npm` -- `NXLog` -- `Observability Pipelines` -- `OkHttp` -- `OneLogin` -- `OPcache` -- `OpenLDAP` -- `OpenMetrics` -- `OpenShift` -- `OpenStack` -- `openSUSE` -- `OpenTelemetry` -- `OpenTracing` -- `OpenVPN` -- `OpsGenie` -- `OpsWorks` -- `Oracle Instant Client` -- `Phusion Passenger` -- `Pipeline Visibility` -- `Pivotal Platform` -- `Postgres` -- `PostgreSQL` -- `PowerDNS` -- `Prometheus` -- `Prometheus Alertmanager` -- `Puppet` -- `Python` -- `RabbitMQ` -- `Rails` -- `Rancher` -- `Real User Monitoring` -- `Red Hat` -- `Redis` -- `ReplicaSet` -- `RocketPants` -- `Roku Monitoring` -- `Root Cause Analysis` -- `Route53` -- `RSpec` -- `Ruby` -- `RUM` -- `RumMonitor` -- `SafeNet` -- `SaltStack` -- `Security Monitoring` -- `Security Signal` -- `Security Signals` -- `SELinux` -- `Sensitive Data Scanner` -- `Serverless APM` -- `Serverless Framework` -- `Serverless Monitoring` -- `Serverless Workload Monitoring` -- `Service Checks` -- `Session Replay` -- `Siri` -- `Slack` -- `SLIs` -- `SLOs` -- `socat` -- `Social Security` -- `SQL Server` -- `SQLDelight` -- `SQLite` -- `Stackdriver` -- `StackPulse` -- `StackStorm` -- `StatsD` -- `Sumo Logic` -- `Swift` -- `Synthetic Monitoring` -- `Syslog` -- `sysOID` -- `System Core` -- `System Swap` -- `Teamcity` -- `Terraform` -- `Testing Visibility` -- `TokuMX` -- `Tracing Without Limits` -- `Trello` -- `Twilio` -- `TypeScript` -- `Ubuntu` -- `Unified Service Tagging` -- `Unix` -- `Unix Domain Socket` -- `URLs` -- `User Datagram Protocol` -- `USM` -- `Universal Service Monitoring` -- `Varnish` -- `Vector` -- `Vertica` -- `VMWare` -- `vSphere` -- `Watchdog` -- `Watchdog Insights` -- `Webhook` -- `WildFly` -- `Windows` -- `Xray` -- `ZooKeeper` - -### Missing ™ on phrase '%s' - -**Level:** *error* - -[Link](https://www.datadoghq.com) - -**Tokens:** -- `(? `unfamiliar` -- `unusual` -> `unfamiliar` -- `new` -> `unfamiliar` - -**Ignore Case:** True - -### Rule names should not be longer than 10 words - -**Level:** *error* - -**Ignore Case:** False - diff --git a/scripts/update-rules-page.py b/scripts/update-rules-page.py index e5c3354..85956ec 100644 --- a/scripts/update-rules-page.py +++ b/scripts/update-rules-page.py @@ -12,13 +12,19 @@ def generate_rule_markdown(rule_data): if 'link' in rule_data: markdown += f"[Link]({rule_data['link']})\n\n" - for field in ['tokens', 'exceptions']: + for field in ['tokens']: if field in rule_data: markdown += f"**{field.capitalize()}:**\n" for item in rule_data[field]: markdown += f"- `{item}`\n" markdown += "\n" + if 'exceptions' in rule_data: + markdown += "
\nExceptions:\n\n" + for exception in rule_data['exceptions']: + markdown += f"- `{exception}`\n" + markdown += "
\n\n" + if 'swap' in rule_data: markdown += "**Swap:**\n" if isinstance(rule_data['swap'], dict): diff --git a/styles/Datadog/inclusive.yml b/styles/Datadog/inclusive.yml index 956add1..8a815f0 100644 --- a/styles/Datadog/inclusive.yml +++ b/styles/Datadog/inclusive.yml @@ -1,5 +1,5 @@ extends: substitution -description: Use inclusive language. +description: Use inclusive language message: "Use '%s' instead of '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language" ignorecase: true From ca7a4c80de94cd5943b3c04633b9b991a7b99d9b Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:50:42 -0600 Subject: [PATCH 41/51] Remove tests. --- styles/Datadog/test.yml | 12 ------------ styles/Datadog/test3.yml | 12 ------------ 2 files changed, 24 deletions(-) delete mode 100644 styles/Datadog/test.yml delete mode 100644 styles/Datadog/test3.yml diff --git a/styles/Datadog/test.yml b/styles/Datadog/test.yml deleted file mode 100644 index 41b1722..0000000 --- a/styles/Datadog/test.yml +++ /dev/null @@ -1,12 +0,0 @@ -extends: existence -message: "Brett Test 2" -link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes" -nonword: true -level: warning -action: - name: edit - params: - - remove - - ' ' -tokens: - - '\s[—–]\s' diff --git a/styles/Datadog/test3.yml b/styles/Datadog/test3.yml deleted file mode 100644 index a00e39d..0000000 --- a/styles/Datadog/test3.yml +++ /dev/null @@ -1,12 +0,0 @@ -extends: existence -message: "Brett Test!" -link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes" -nonword: true -level: warning -action: - name: edit - params: - - remove - - ' ' -tokens: - - '\s[—–]\s' From 551b8be7f954f20f53dde09f40a3540f4d193109 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:55:47 -0600 Subject: [PATCH 42/51] Force add RULES.md. --- .github/workflows/update-rules.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-rules.yml b/.github/workflows/update-rules.yml index 3bead6c..4442f74 100644 --- a/.github/workflows/update-rules.yml +++ b/.github/workflows/update-rules.yml @@ -31,7 +31,7 @@ jobs: run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git add RULES.md + git add -f RULES.md TIMESTAMP=$(date -u +"%Y-%m-%d") git commit -m "Update RULES.md - $TIMESTAMP." || echo "No changes to commit." git config pull.rebase true From bc78238d73b37f640a1897ed7a04fe866a16a90b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 22:56:07 +0000 Subject: [PATCH 43/51] Update RULES.md - 2024-03-18. --- RULES.md | 848 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 848 insertions(+) create mode 100644 RULES.md diff --git a/RULES.md b/RULES.md new file mode 100644 index 0000000..cbcb87c --- /dev/null +++ b/RULES.md @@ -0,0 +1,848 @@ +# Vale Rules Overview + +This page provides a comprehensive list of the Vale linter rules used in Datadog documentation. + +Last Updated: 2024-03-18 + +## Table of Contents +- [Vocab](#vocab) +- [CWS-Descriptions](#cws-descriptions) +- [SIEM-Names](#siem-names) +- [Datadog](#datadog) +- [CWS-Names](#cws-names) + +## Vocab + + +## CWS-Descriptions + +### Refer to the 'Datadog %s' instead of the 'Datadog %s' + +**Level:** *error* + +**Swap:** +- `agent` -> `Agent` + +**Ignore Case:** False + + +## SIEM-Names + +### Rule names should use sentence case + +**Level:** *error* + +
+Exceptions: + +- `1Password` +- `Advanced Protection` +- `Autoscaling Group` +- `Amazon EC2 Instance` +- `Amazon S3` +- `API calls` +- `Auth0 Attack Protection` +- `Auth0 Breached Password Detection` +- `Auth0 Brute Force Protection` +- `Auth0 Guardian MFA` +- `Auth0 Suspicious IP Throttling` +- `AWS Cloudtrail GetCallerIdentity` +- `AWS DescribeInstances` +- `AWS IAM User created with AdministratorAccess policy attached` +- `AWS ConsoleLogin` +- `AWS Console login without MFA` +- `AWS GuardDuty` +- `AWS IAM Roles Anywhere` +- `AWS Kinesis Firehose` +- `AWS Lambda` +- `AWS Network Gateway` +- `AWS Secrets Manager` +- `AWS Systems Manager` +- `AWS Verified Access` +- `AWS VPC Flow Log` +- `Azure Active Directory` +- `Azure AD Identity Protection` +- `Azure AD Privileged Identity Management` +- `CloudTrail` +- `Cloudflare` +- `Cloudflare CASB Finding` +- `Cloudflare L7 DDOS` +- `Crowdstrike Alerts` +- `Enterprise Organization` +- `GitHub` +- `GitHub Advanced Security` +- `GitHub Dependabot` +- `GitHub Personal Access Token` +- `GitHub Secret Scanning` +- `Google App Engine` +- `Google Cloud` +- `Google Cloud IAM Role updated` +- `Google Cloud Storage` +- `Google Cloud Storage Bucket` +- `Google Compute` +- `Google Compute Engine` +- `Google Drive` +- `Google Security Command Center` +- `Google Workspace` +- `IdP configuration changed` +- `Impossible Travel Auth0` +- `IoC` +- `Jamf Protect` +- `Microsoft 365 Application Impersonation` +- `Microsoft 365 Default or Anonymous` +- `Microsoft 365 E-Discovery` +- `Microsoft 365 Exchange` +- `Microsoft 365 Full Access` +- `Microsoft 365 Inbound Connector` +- `Microsoft 365 OneDrive` +- `Microsoft 365 Security and Compliance` +- `Microsoft 365 SendAs` +- `Microsoft Defender for Cloud` +- `Microsoft Intune Enterprise MDM` +- `Microsoft Teams` +- `Okta` +- `Okta Identity Provider` +- `Palo Alto Networks Firewall` +- `RDS Snapshot` +- `Scout Suite` +- `Sqreen` +- `Tor` +- `TruffleHog` +- `Zendesk Automatic Redaction` +
+ + +## Datadog + +### Use inclusive language + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language) + +**Swap:** +- `black ?list` -> `disallow list|exclude list` +- `master` -> `primary` +- `slave` -> `secondary` +- `white ?list` -> `allow list|include list` + +**Ignore Case:** True + +### Avoid vague text in links like '%s' unless you can pair it with more descriptive text + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#links) + +**Swap:** +- `\[here\]\(.*?\)` -> `here` +- `\s*here\s*` -> `here` +- `\[this\]\(.*?\)` -> `this` +- `\s*this\s*` -> `this` +- `\[page\]\(.*?\)` -> `page` +- `\s*page\s*` -> `page` +- `\[this page\]\(.*?\)` -> `this page` +- `\s*this page\s*` -> `this page` + +**Ignore Case:** True + +### Use '%s' instead of '%s' + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `a number of` -> `few|several|many` +- `acknowledgement` -> `acknowledgment` +- `App Analytics` -> `Tracing without Limits™` +- `auto(?:\s|-)complete` -> `autocomplete` +- `auto(?:\s|-)completion` -> `autocompletion` +- `Availability Zone` -> `availability zone` +- `Availability Zones` -> `availability zones` +- `back(?:\s|-)end` -> `backend` +- `back(?:\s|-)ends` -> `backends` +- `bear in mind` -> `keep in mind` +- `boolean` -> `Boolean` +- `booleans` -> `Booleans` +- `cheat sheet` -> `cheatsheet` +- `command line interface` -> `command-line interface` +- `Create a new` -> `Create a|Create an` +- `culprit` -> `cause` +- `data are` -> `data is` +- `data(?:\s|-)point` -> `datapoint` +- `data(?:\s|-)points` -> `datapoints` +- `data(?:\s|-)set` -> `dataset` +- `data(?:\s|-)sets` -> `datasets` +- `data-?center` -> `data center` +- `data-?centers` -> `data centers` +- `Datadog (?:app|application)` -> `Datadog|Datadog site` +- `Datadog product` -> `Datadog|Datadog service` +- `data-?source` -> `data source` +- `data-?sources` -> `data sources` +- `default (?:dash|screen)board` -> `out-of-the-box dashboard` +- `default (?:dash|screen)boards` -> `out-of-the-box dashboards` +- `(?:Dev/?ops|dev/?ops|Dev/Ops)` -> `DevOps|DevSecOps` +- `drill (?:down|into)` -> `examine|investigate|analyze` +- `drilling (?:down|into)` -> `examining|investigating|analyzing` +- `Distributed Tracing` -> `distributed tracing` +- `(?:easy|easily)` -> `` +- `e-?book` -> `eBook` +- `e-?books` -> `eBooks` +- `e-mail` -> `email` +- `e-mailing` -> `emailing` +- `e-mails` -> `emails` +- `end(?:\s|-)point` -> `endpoint` +- `end(?:\s|-)points` -> `endpoints` +- `event (?:stream|streem)` -> `Event Stream` +- `flame-?graph` -> `flame graph` +- `flame-?graphs` -> `flame graphs` +- `figure out` -> `determine` +- `figuring out` -> `determining` +- `file(?:\s|-)name` -> `filename` +- `file(?:\s|-)names` -> `filenames` +- `filesystem` -> `file system` +- `filesystems` -> `file systems` +- `fine\s?-?tune` -> `customize|optimize|refine` +- `for the most part` -> `generally|usually` +- `front(?:\s|-)end` -> `frontend` +- `health-?check` -> `heath check` +- `health-?checks` -> `heath checks` +- `(?:heat-?map|Heat Map)` -> `heat map` +- `(?:heat-?maps|Heat Maps)` -> `heat maps` +- `(?:host-?map|Host Map)` -> `host map` +- `(?:host-?maps|Host Maps)` -> `host maps` +- `hone in` -> `home in` +- `hones in` -> `homes in` +- `honing in` -> `homing in` +- `highly` -> `` +- `hit` -> `click|select` +- `in order to` -> `to` +- `in sync` -> `in-sync` +- `In sync` -> `In-sync` +- `indices` -> `indexes` +- `indexation` -> `indexing` +- `infrastructures` -> `infrastructure` +- `install command` -> `installation command` +- `Internet` -> `internet` +- `(?:i/?-?o|I-?O)` -> `I/O` +- `(?:i/?ops|I/OPS)` -> `IOPS` +- `just` -> `` +- `keep in mind` -> `consider` +- `left up to` -> `determined by` +- `let's assume` -> `assuming|for example, if` +- `load-?balancing` -> `load balancing` +- `machine-?learning` -> `machine learning` +- `micro(?:\s|-)service` -> `microservice` +- `micro(?:\s|-)services` -> `microservices` +- `multi-?alert` -> `multi alert` +- `multicloud` -> `multi-cloud` +- `multiline` -> `multi-line` +- `Note that` -> `**Note**:` +- `(?:obvious|obviously|Obviously)` -> `` +- `off-line` -> `offline` +- `on the fly` -> `real-time|in real time` +- `Once` -> `After` +- `open-?source` -> `open source` +- `page view` -> `pageview` +- `page views` -> `pageviews` +- `play a hand` -> `influence` +- `please` -> `` +- `pre-connect` -> `preconnect` +- `quick|quickly` -> `` +- `screen(?:\s|-)board` -> `screenboard` +- `simple|simply` -> `` +- `single pane of glass` -> `single view|single place|single page` +- `slice and dice` -> `filter and group` +- `stand for` -> `represent|mean` +- `Synthetics` -> `Synthetic Monitoring` +- `reenable` -> `re-enable` +- `run(?:\s|-)time` -> `runtime` +- `refer to|visit` -> `see|read|follow` +- `time board` -> `timeboard` +- `time(?:\s|-)series` -> `timeseries` +- `time-?frame` -> `time frame` +- `time-?frames` -> `time frames` +- `top-?list` -> `top list` +- `trade(?:\s|-)off` -> `trade-off` +- `Trace Search and Analytics` -> `Tracing without Limits™` +- `turnkey` -> `ready to use` +- `under the hood` -> `` +- `utilize` -> `use` +- `very` -> `` +- `via` -> `with|through` +- `visit` -> `see|read` +- `webserver` -> `web server` +- `web site` -> `website` +- `X-axis` -> `x-axis` +- `Y-axis` -> `y-axis` +- `(?:github|Github)` -> `GitHub` +- `(?:kubernetes|k8s|K8s|K8S)` -> `Kubernetes` +- `(?:Mapreduce|mapreduce|Map reduce|Map Reduce)` -> `MapReduce` +- `memcached` -> `Memcached` +- `(?:nginx|Nginx)` -> `NGINX` +- `(?:node.js|nodeJS|NodeJS|node.JS|Node.JS)` -> `Node.js` +- `(?:pagerduty|pager duty|Pagerduty|Pager duty)` -> `PagerDuty` +- `prometheus` -> `Prometheus` +- `(?:sql|Sql)` -> `SQL` +- `(?:statsd|statsD|Statsd)` -> `StatsD` +- `(?:unix|Unix)` -> `UNIX` + +**Ignore Case:** False + +### Don't use Latin abbreviations + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations) + +**Swap:** +- `\b(?:eg|e\.g\.|eg\.)[\s,]` -> `for example` +- `\b(?:ie|i\.e\.|ie\.)[\s,]` -> `that is` + +**Ignore Case:** True + +### '%s' should use sentence-style capitalization + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#headers) + +
+Exceptions: + +- `ACLs` +- `ActiveMQ XML Integration` +- `Agent` +- `Agentless` +- `Agents` +- `Airflow` +- `Amazon` +- `Amazon Web Services` +- `APCu` +- `APIs` +- `APM` +- `Application Performance Monitoring` +- `APM & Continuous Profiler` +- `App Analytics` +- `App Service` +- `AppVeyor` +- `Application Security Management` +- `Application Vulnerability Management` +- `AuthN` +- `Autodiscovery` +- `AWS Step Functions` +- `AWS Systems Manager` +- `Azure` +- `Azure App Service` +- `Azure App Service Plan` +- `Azure Blob Storage` +- `Azure Event Hub` +- `Audit Trail` +- `BitBucket` +- `BuildKite` +- `Browser Monitoring` +- `CakePHP` +- `Cassandra Nodetool` +- `Cassandra Nodetool Integration` +- `CentOS` +- `Chef` +- `CircleCI` +- `CI/CD` +- `CI Visibility` +- `Clipboard` +- `Cloud Cost Management` +- `Cloud Pub Sub` +- `Cloud Security Management` +- `Cloud Security Posture Management` +- `Cloud SIEM` +- `Cloud Workload Security` +- `CloudFormation` +- `CloudSQL` +- `CloudTrail` +- `CloudWatch` +- `Cluster Agent` +- `Continuous Profiler` +- `Continuous Testing` +- `DaemonSet` +- `Data Collected` +- `Database Monitoring` +- `Datadog` +- `DatadogMetric` +- `Datadog Agent Manager` +- `Datadog for Government` +- `Datadog Forwarder` +- `Datadog Lambda Extension` +- `Datadog Operator` +- `Datadog Plugin` +- `Datadog Watchdog` +- `DatadogHook` +- `Debian` +- `Detection Rules` +- `Docker` +- `Docker Compose` +- `Docker Swarm` +- `Dockerfile` +- `DogStatsD` +- `Envoy` +- `Fargate` +- `FastCGI` +- `Firehose Nozzle` +- `FireLens` +- `Fluent Bit` +- `Fluentd` +- `FreeBSD` +- `FreeSwitch` +- `Further Reading` +- `GeoIP` +- `Git` +- `GitHub` +- `GitHub Actions` +- `GitLab` +- `GitLab Runner Integration` +- `Google` +- `Google Analytics` +- `Google Cloud` +- `Google Cloud Functions` +- `GraphQL` +- `Gunicorn` +- `HAProxy` +- `HBase RegionServer Integration` +- `HDFS DataNode Integration` +- `HDFS NameNode Integration` +- `Helm` +- `Heroku` +- `HipChat` +- `HostPort` +- `I` +- `IdP` +- `IDs` +- `iLert` +- `Incident Management` +- `Infrastructure Monitoring` +- `Ingress Controller` +- `Internet Information Services` +- `IoT` +- `IPs` +- `Java` +- `JavaScript` +- `JBoss` +- `Jenkins` +- `JFrog` +- `JFrog Artifactory` +- `Jira` +- `JMXFetch` +- `Journald` +- `Kafka` +- `Kafka Consumer Integration` +- `Kubernetes` +- `Kubernetes Engine` +- `Kubernetes Pod` +- `Kubernetes Service` +- `Lambda` +- `Lambda Layer` +- `Lambda@Edge` +- `LaunchDarkly` +- `Linux` +- `Live Analytics` +- `Live Search` +- `Live Tail` +- `Log Explorer` +- `Log Management` +- `Log Rehydration` +- `Logback` +- `macOS` +- `Marketplace` +- `MarkLogic` +- `Meraki` +- `Mesos Slave Integration` +- `Metrics Explorer` +- `Metrics without Limits` +- `Mobile Monitoring` +- `MongoDB` +- `MsTest` +- `MySQL` +- `Network Address Translation` +- `Network Device Monitoring` +- `Network Performance Monitoring` +- `New Relic` +- `NGINX Plus` +- `NixOS` +- `Node` +- `Notebook` +- `Notebook List` +- `npm` +- `NXLog` +- `Observability Pipelines` +- `OkHttp` +- `OneLogin` +- `OPcache` +- `OpenLDAP` +- `OpenMetrics` +- `OpenShift` +- `OpenStack` +- `openSUSE` +- `OpenTelemetry` +- `OpenTracing` +- `OpenVPN` +- `OpsGenie` +- `OpsWorks` +- `Oracle Instant Client` +- `Phusion Passenger` +- `Pipeline Visibility` +- `Pivotal Platform` +- `Postgres` +- `PostgreSQL` +- `PowerDNS` +- `Prometheus` +- `Prometheus Alertmanager` +- `Puppet` +- `Python` +- `RabbitMQ` +- `Rails` +- `Rancher` +- `Real User Monitoring` +- `Red Hat` +- `Redis` +- `ReplicaSet` +- `RocketPants` +- `Roku Monitoring` +- `Root Cause Analysis` +- `Route53` +- `RSpec` +- `Ruby` +- `RUM` +- `RumMonitor` +- `SafeNet` +- `SaltStack` +- `Security Monitoring` +- `Security Signal` +- `Security Signals` +- `SELinux` +- `Sensitive Data Scanner` +- `Serverless APM` +- `Serverless Framework` +- `Serverless Monitoring` +- `Serverless Workload Monitoring` +- `Service Checks` +- `Session Replay` +- `Siri` +- `Slack` +- `SLIs` +- `SLOs` +- `socat` +- `Social Security` +- `SQL Server` +- `SQLDelight` +- `SQLite` +- `Stackdriver` +- `StackPulse` +- `StackStorm` +- `StatsD` +- `Sumo Logic` +- `Swift` +- `Synthetic Monitoring` +- `Syslog` +- `sysOID` +- `System Core` +- `System Swap` +- `Teamcity` +- `Terraform` +- `Testing Visibility` +- `TokuMX` +- `Tracing Without Limits` +- `Trello` +- `Twilio` +- `TypeScript` +- `Ubuntu` +- `Unified Service Tagging` +- `Unix` +- `Unix Domain Socket` +- `URLs` +- `User Datagram Protocol` +- `USM` +- `Universal Service Monitoring` +- `Varnish` +- `Vector` +- `Vertica` +- `VMWare` +- `vSphere` +- `Watchdog` +- `Watchdog Insights` +- `Webhook` +- `WildFly` +- `Windows` +- `Xray` +- `ZooKeeper` +
+ +### Missing ™ on phrase '%s' + +**Level:** *error* + +[Link](https://www.datadoghq.com) + +**Tokens:** +- `(? +Exceptions: + +- `(?:A|a)dvertise` +- `(?:A|a)dvise` +- `(?:A|a)ppraise` +- `(?:A|a)pprise` +- `(?:A|a)rise` +- `(?:C|c)hastise` +- `(?:C|c)ircumcise` +- `(?:C|c)lockwise` +- `(?:C|c)omprise` +- `(?:C|c)ompromise` +- `(?:C|c)oncise` +- `(?:C|c)ounterclockwise` +- `(?:D|d)emise` +- `(?:D|d)espise` +- `(?:D|d)evise` +- `(?:D|d)isguise` +- `(?:E|e)nterprise` +- `(?:E|e)xcise` +- `(?:E|e)xercise` +- `(?:E|e)xpertise` +- `(?:F|f)ranchise` +- `(?:I|i)mprecise` +- `(?:I|i)mprovise` +- `(?:I|i)ncise` +- `(?:L|l)ikewise` +- `(?:M|m)erchandise` +- `(?:N|n)oise` +- `(?:O|o)therwise` +- `(?:P|p)aradise` +- `(?:P|p)oise` +- `(?:P|p)raise` +- `(?:P|p)recise` +- `(?:P|p)remise` +- `(?:P|p)romise` +- `(?:R|r)evise` +- `(?:R|r)ise` +- `(?:S|s)upervise` +- `(?:S|s)urmise` +- `(?:S|s)urprise` +- `(?:T|t)elevise` +- `(?:W|w)ise` +- `(?:d|D)etours?` +- `(?:c|C)ontours?` +- `(?:g|G)lamour` +- `(?:o|O)utpour` +- `(?:s|S)cours?` +- `(?:t|T)roubadours?` +- `(?:p|P)ompadour` + + +**Ignore Case:** True + +### Avoid first-person pronouns such as '%s' + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#pronouns) + +**Tokens:** +- `(?<=^|\s)I(?=\s)` +- `(?<=^|\s)I,(?=\s)` +- `\bI'm\b` +- `(?<=\s)[Mm]e\b` +- `(?<=\s)[Mm]y\b` +- `(?<=\s)[Mm]ine\b` +- `(?<=\s)[Ww]e\b` +- `we'(?:ve|re)` +- `(?<=\s)[Uu]s\b` +- `(?<=\s)[Oo]ur\b` +- `\blet's\b` + +### Avoid en dashes ('–'). For hyphenated words, use a hyphen ('-'). +For parenthesis, use an em dash ('—') + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) + +**Tokens:** +- `–` + +### Use %s (the former, to refer to Datadog's mechanism for applying integration configurations to containers; the latter, to refer to automatic discovery IN GENERAL) instead of '%s' + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#words-and-phrases) + +**Swap:** +- `{'(?:autodiscovery|auto-discovery|Auto-discovery)': 'Autodiscovery|automatic detection'}` +- `{'(?:autodiscover|auto-discover|Auto-discover)': 'Autodiscover|automatically detect'}` +- `{'(?:autodiscovered|auto-discovered|Auto-discovered)': 'Autodiscovered|automatically detected'}` + +**Ignore Case:** False + +### Use a gender-neutral pronoun instead of '%s' + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#gender) + +**Tokens:** +- `he/she` +- `s/he` +- `\(s\)he` +- `\bhe\b` +- `\bhim\b` +- `\bhis\b` +- `\bshe\b` +- `\bher\b` + +**Ignore Case:** True + +### Use only one space between words and sentences (not two) + +**Level:** *error* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#spaces) + +**Tokens:** +- `[\w.?!,\(\)\-":] {2,}[\w.?!,\(\)\-":]` + +### Use straight quotes instead of smart quotes + +**Level:** *error* + +**Tokens:** +- `“` +- `”` +- `‘` +- `’` + +### Format times as 'HOUR:MINUTE a.m.' or HOUR:MINUTE p.m.' instead of '%s' + +**Level:** *warning* + +[Link](https://datadoghq.atlassian.net/wiki/spaces/WRIT/pages/2732523547/Style+guide#%s) + +**Tokens:** +- `(1[012]|[1-9]):[0-5][0-9] (A\.M\.|P\.M\.)` +- `(1[012]|[1-9]):[0-5][0-9] (?i)(a\.m[^\.]|p\.m[^\.])` +- `(1[012]|[1-9]):[0-5][0-9][ ]?(?i)(am|pm)` + +### Use the Oxford comma in '%s' + +**Level:** *suggestion* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#commas) + +**Tokens:** +- `(?:[^,]+,){1,}\s\w+\s(?:and|or)` + +### Don't put a space before or after a dash + +**Level:** *warning* + +[Link](https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#dashes) + +**Tokens:** +- `\s[—–]\s` + +### Try to keep your sentence length to 25 words or fewer + +**Level:** *suggestion* + +**Ignore Case:** False + + +## CWS-Names + +### Rule names should not start with '%s' + +**Level:** *error* + +**Tokens:** +- `A` +- `An` +- `The` + +**Ignore Case:** False + +### Rule names should avoid weak works like '%s' + +**Level:** *error* + +[Link](https://developers.google.com/tech-writing/one/clear-sentences) + +**Tokens:** +- `was` +- `were` +- `is` +- `are` + +**Ignore Case:** True + +### Rule names should use sentence case + +**Level:** *error* + +
+Exceptions: + +- `OverlayFS` +- `DNS` +- `TXT` +- `Kubernetes` +
+ +### New Value rules should use '%s' instead of '%s' + +**Level:** *error* + +**Swap:** +- `unrecognized` -> `unfamiliar` +- `unusual` -> `unfamiliar` +- `new` -> `unfamiliar` + +**Ignore Case:** True + +### Rule names should not be longer than 10 words + +**Level:** *error* + +**Ignore Case:** False + From acb4570a42c2aeecd3103f8c879f285b94044cb2 Mon Sep 17 00:00:00 2001 From: Brett Blue Date: Mon, 18 Mar 2024 16:57:26 -0600 Subject: [PATCH 44/51] Update description. --- styles/Datadog/gender.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/styles/Datadog/gender.yml b/styles/Datadog/gender.yml index b2b19b7..cc0a570 100644 --- a/styles/Datadog/gender.yml +++ b/styles/Datadog/gender.yml @@ -1,4 +1,5 @@ extends: existence +description: Use gender-neutral pronouns message: "Use a gender-neutral pronoun instead of '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#gender" level: error From e9e0aa4438a14800b93138aacfb1f1fcfae7ffb9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 18 Mar 2024 22:58:19 +0000 Subject: [PATCH 45/51] Update RULES.md - 2024-03-18. --- RULES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RULES.md b/RULES.md index cbcb87c..464941e 100644 --- a/RULES.md +++ b/RULES.md @@ -716,7 +716,7 @@ For parenthesis, use an em dash ('—') **Ignore Case:** False -### Use a gender-neutral pronoun instead of '%s' +### Use gender-neutral pronouns **Level:** *error* From fc230cddaa3ae1d7893244eae268acda5d375510 Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Wed, 20 Mar 2024 11:24:09 -0600 Subject: [PATCH 46/51] Test update --- styles/Datadog/abbreviations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/Datadog/abbreviations.yml b/styles/Datadog/abbreviations.yml index ce733d5..356d424 100644 --- a/styles/Datadog/abbreviations.yml +++ b/styles/Datadog/abbreviations.yml @@ -1,5 +1,5 @@ extends: substitution -description: Don't use Latin abbreviations +description: Do not use Latin abbreviations message: "Use '%s' instead of abbreviations like '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#abbreviations" ignorecase: true From 19e4b2f5758541f09452af5c2f7f8c8efa3d334c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 20 Mar 2024 17:24:26 +0000 Subject: [PATCH 47/51] Update RULES.md - 2024-03-20. --- RULES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RULES.md b/RULES.md index 464941e..6669c73 100644 --- a/RULES.md +++ b/RULES.md @@ -2,7 +2,7 @@ This page provides a comprehensive list of the Vale linter rules used in Datadog documentation. -Last Updated: 2024-03-18 +Last Updated: 2024-03-20 ## Table of Contents - [Vocab](#vocab) @@ -290,7 +290,7 @@ Last Updated: 2024-03-18 **Ignore Case:** False -### Don't use Latin abbreviations +### Do not use Latin abbreviations **Level:** *warning* From 6e180a6272f8818f280c11eab883617ce1c65d6d Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:28:11 -0600 Subject: [PATCH 48/51] Update inclusive.yml --- styles/Datadog/inclusive.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/styles/Datadog/inclusive.yml b/styles/Datadog/inclusive.yml index 8a815f0..bc1a9df 100644 --- a/styles/Datadog/inclusive.yml +++ b/styles/Datadog/inclusive.yml @@ -1,5 +1,4 @@ extends: substitution -description: Use inclusive language message: "Use '%s' instead of '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language" ignorecase: true From 095db08c9274821e32cb93e8e856ed8c3f8b0c22 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 20 Mar 2024 19:28:28 +0000 Subject: [PATCH 49/51] Update RULES.md - 2024-03-20. --- RULES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RULES.md b/RULES.md index 6669c73..162a856 100644 --- a/RULES.md +++ b/RULES.md @@ -114,7 +114,7 @@ Last Updated: 2024-03-20 ## Datadog -### Use inclusive language +### Use '%s' instead of '%s' **Level:** *error* From 4941c172fe9a545107d2ba9fd9761df7fe384bcc Mon Sep 17 00:00:00 2001 From: Brett Blue <84536271+brett0000FF@users.noreply.github.com> Date: Wed, 20 Mar 2024 14:04:31 -0600 Subject: [PATCH 50/51] Update inclusive.yml --- styles/Datadog/inclusive.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/styles/Datadog/inclusive.yml b/styles/Datadog/inclusive.yml index bc1a9df..8a815f0 100644 --- a/styles/Datadog/inclusive.yml +++ b/styles/Datadog/inclusive.yml @@ -1,4 +1,5 @@ extends: substitution +description: Use inclusive language message: "Use '%s' instead of '%s'." link: "https://github.com/DataDog/documentation/blob/master/CONTRIBUTING.md#inclusive-language" ignorecase: true From 7c62a168c105d59e0144d67455e966b28aa88d2b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 20 Mar 2024 20:04:49 +0000 Subject: [PATCH 51/51] Update RULES.md - 2024-03-20. --- RULES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RULES.md b/RULES.md index 162a856..6669c73 100644 --- a/RULES.md +++ b/RULES.md @@ -114,7 +114,7 @@ Last Updated: 2024-03-20 ## Datadog -### Use '%s' instead of '%s' +### Use inclusive language **Level:** *error*