├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── config.yml
│ ├── documentation.md
│ ├── feature_request.md
│ ├── question.md
│ └── site_update.md
├── PULL_REQUEST_TEMPLATE.md
├── config.yml
├── dependabot.yml
├── label-commenter-config.yml
├── readme
│ └── images
│ │ ├── Layer5-Community-Sign_square.png
│ │ ├── community.svg
│ │ ├── slack-128.png
│ │ └── slack-dark-128.png
├── release-drafter.yml
├── stale.yml
├── welcome
│ └── Layer5-celebration.png
└── workflows
│ ├── build-and-publish.yaml
│ ├── ci.yml
│ ├── invitations.yml
│ ├── label-commenter.yml
│ ├── newcomer-alert.yml
│ ├── release-drafter.yml
│ ├── slack.yml
│ └── updateDiscussons.yml
├── .gitignore
├── .golangci.yml
├── CNAME
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING-gitflow.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── WORKSPACE
├── action.yml
├── apinighthawk
├── bin
│ ├── nighthawk_client
│ ├── nighthawk_output_transform
│ ├── nighthawk_service
│ └── nighthawk_test_server
└── nighthawk.go
├── ci
├── build.sh
└── docker_build.sh
├── cmd
└── main.go
├── docs
├── .gitignore
├── 404.html
├── CNAME
├── Gemfile
├── Gemfile.lock
├── Makefile
├── _config.yml
├── _data
│ ├── discuss
│ │ └── nighthawk.json
│ ├── docs.yml
│ ├── footer-social.yml
│ ├── footer.yml
│ └── navigation.yml
├── _includes
│ ├── analytics.html
│ ├── docs-title.html
│ ├── explain.html
│ ├── faq.html
│ ├── footer.html
│ ├── getnighthawk.html
│ ├── header.html
│ ├── list-docs.html
│ ├── list-posts.html
│ ├── mailing-list.html
│ ├── navigation.html
│ ├── post-title.html
│ ├── project-cards.html
│ ├── related-discussions.html
│ ├── relative-src.html
│ ├── sidebar.html
│ ├── social-icon.html
│ ├── stewarded.html
│ └── subscribe.html
├── _layouts
│ ├── archive.html
│ ├── default.html
│ ├── docs.html
│ ├── page-no-descr.html
│ ├── page.html
│ └── plain.html
├── _sass
│ ├── about.scss
│ ├── adapters.scss
│ ├── blog.scss
│ ├── calendar.scss
│ ├── cloudcannon.scss
│ ├── contact.scss
│ ├── doc.scss
│ ├── elements.scss
│ ├── explain.scss
│ ├── faq.scss
│ ├── features.scss
│ ├── footer.scss
│ ├── forms.scss
│ ├── getnighthawk-purpose.scss
│ ├── getnighthawk.scss
│ ├── index.scss
│ ├── landing-page.scss
│ ├── layout.scss
│ ├── mailing-list.scss
│ ├── mixins
│ │ ├── columns.scss
│ │ └── flexbox.scss
│ ├── navigation.scss
│ └── variables.scss
├── assets
│ ├── css
│ │ ├── blog.css
│ │ ├── blog.css.map
│ │ ├── cloudcannon.css
│ │ ├── cloudcannon.css.map
│ │ ├── columns.css
│ │ ├── columns.css.map
│ │ ├── copy-button.css
│ │ ├── flexbox.css
│ │ ├── flexbox.css.map
│ │ ├── fullcalender.css
│ │ ├── getnighthawk.css
│ │ ├── main.scss
│ │ ├── program.css
│ │ ├── screen.scss
│ │ ├── sidebar_doc.css
│ │ ├── stellarnav.css
│ │ ├── stellarnav.min.css
│ │ ├── subscribe.css
│ │ ├── variables.css
│ │ └── variables.css.map
│ ├── fonts
│ │ ├── OpenSans-Bold.ttf
│ │ ├── OpenSans-BoldItalic.ttf
│ │ ├── OpenSans-ExtraBold.ttf
│ │ ├── OpenSans-ExtraBoldItalic.ttf
│ │ ├── OpenSans-Italic.ttf
│ │ ├── OpenSans-Light.ttf
│ │ ├── OpenSans-LightItalic.ttf
│ │ ├── OpenSans-Regular.ttf
│ │ ├── OpenSans-Semibold.ttf
│ │ └── OpenSans-SemiboldItalic.ttf
│ ├── images
│ │ ├── Rectangle 483.png
│ │ ├── Rectangle.png
│ │ ├── about
│ │ │ └── about-nighthawk.svg
│ │ ├── buttons
│ │ │ ├── clippy.svg
│ │ │ ├── external-link_black.svg
│ │ │ ├── external-link_gray.svg
│ │ │ └── external-link_white.svg
│ │ ├── card-component-images
│ │ │ ├── applications.png
│ │ │ ├── infrastructure.png
│ │ │ └── platform.png
│ │ ├── latency-at-scale.png
│ │ ├── logos
│ │ │ ├── google.png
│ │ │ ├── heroSection-logo.png
│ │ │ ├── layer5.png
│ │ │ ├── meshery-logo-text.png
│ │ │ ├── meshery-logo.png
│ │ │ ├── newsletter-signup.png
│ │ │ ├── nighthawk
│ │ │ │ ├── horizontal
│ │ │ │ │ ├── nighthawk-text-side.png
│ │ │ │ │ ├── nighthawk-text-side.svg
│ │ │ │ │ ├── nighthawk-text-side_white.png
│ │ │ │ │ └── nighthawk-text-side_white.svg
│ │ │ │ ├── icon
│ │ │ │ │ ├── nighthawk-icon_white.png
│ │ │ │ │ ├── nighthawk-icon_white.svg
│ │ │ │ │ ├── nighthawk-logo.png
│ │ │ │ │ └── nighthawk-logo.svg
│ │ │ │ ├── name
│ │ │ │ │ ├── nighthawk-text.png
│ │ │ │ │ ├── nighthawk-text.svg
│ │ │ │ │ ├── nighthawk-text_white.png
│ │ │ │ │ └── nighthawk-text_white.svg
│ │ │ │ └── stacked
│ │ │ │ │ ├── nighthawk-full.png
│ │ │ │ │ ├── nighthawk-full.svg
│ │ │ │ │ ├── nighthawk-full_light.png
│ │ │ │ │ ├── nighthawk-full_light.svg
│ │ │ │ │ ├── nighthawk-full_white.png
│ │ │ │ │ └── nighthawk-full_white.svg
│ │ │ └── red-hat.png
│ │ ├── nighthawk-meshery.png
│ │ ├── screenshots
│ │ │ ├── GetNighthawk.svg
│ │ │ ├── Nighthawk+Meshery.svg
│ │ │ ├── Nighthawk.svg
│ │ │ ├── meshery-nighthawk-performance-chart.png
│ │ │ └── meshery-nighthawk.png
│ │ └── smp-standard.png
│ └── js
│ │ ├── docs_nav.js
│ │ ├── main.js
│ │ ├── stellarnav.js
│ │ └── stellarnav.min.js
├── collections
│ ├── _docs
│ │ ├── adaptive_load_controller.md
│ │ ├── architecture
│ │ │ └── nighthawk-architecture.md
│ │ ├── building-nighthawk.md
│ │ ├── deployments.md
│ │ ├── functionality
│ │ │ └── performance-benchmarking.md
│ │ ├── overview
│ │ │ └── using-nighthawk.md
│ │ ├── recent-discussions.md
│ │ ├── using-getnighthawk.md
│ │ └── what-is-nighthawk.md
│ └── _pages
│ │ ├── about.html
│ │ ├── features.html
│ │ ├── subscribe.html
│ │ └── thank-you.html
├── favicon.ico
├── images
│ └── logos
│ │ ├── Rectangle 486.png
│ │ ├── nighthawk-description.png
│ │ └── nighthawk-meshery.png
├── index.html
└── pages
│ └── docs.html
├── env.mk
├── go.mod
├── go.sum
├── pkg
├── client
│ ├── error.go
│ ├── nighthawk.go
│ ├── nighthawk_test.go
│ └── transform.go
└── proto
│ ├── fortio.pb.go
│ ├── options.pb.go
│ ├── output.pb.go
│ ├── service.pb.go
│ └── utils.go
├── sample_data
├── sample_data.json
└── sample_data_fortio.json
└── scripts
├── build.sh
├── publish.sh
├── setup.sh
└── verify.sh
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🐛 General Bug Report
3 | about: Report an issue to help improve the project.
4 | title: ''
5 | labels: 'kind/bug'
6 | assignees: ''
7 | ---
8 |
9 | #### Current Behavior
10 |
11 |
12 | #### Expected Behavior
13 |
14 |
15 | #### Screenshots/Logs
16 |
17 |
18 | #### Environment
19 |
20 | - **Host OS:** Mac Linux Windows
21 | - **Platform:** Docker or Kubernetes
22 | - **Meshery Server Version:** stable-v
23 | - **Meshery Client Version:** stable-v
24 |
25 |
32 |
33 | ---
34 |
35 | #### Contributor Resources
36 |
37 | - See the [Contributing to getnighthawk.dev Website](https://github.com/layer5io/getnighthawk/blob/master/CONTRIBUTING.md)
38 | - See the Project Site section of [GetNighthawk project doc](https://docs.google.com/document/d/1lHfMo4iIx2WXFZIspfHyxTsPR1T63_2IV5NUkgxoo0w)
39 | - 🎨 Wireframes and designs for Nighthawk Site in [Figma](https://www.figma.com/file/5ZwEkSJwUPitURD59YHMEN/Layer5-Designs?type=design&node-id=5046-0&mode=design&t=UYVaGhic2LY8EXee-0)
40 | - Meshery UI Nighthawk (Performance) in [Figma](https://www.figma.com/file/SMP3zxOjZztdOLtgN4dS2W/Meshery-UI?type=design&node-id=2-5814&mode=design&t=Gt14dmRRlpL09apZ-0)
41 | - 🙋🏾🙋🏼 Questions: [Layer5 Discussion Forum](https://discuss.layer5.io) and [Layer5 Community Slack](http://slack.layer5.io)
42 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: 🙋🏾🙋🏼Question
4 | url: https://discuss.layer5.io
5 | about: Submit your question on the discussion forum.
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/documentation.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Documentation issue
3 | about: Issues related to documentation.
4 | title: "[Docs]"
5 | labels: "area/docs"
6 | assignees: ""
7 | ---
8 |
9 | **Current State:**
10 |
11 | **Desired State:**
12 |
13 | ---
14 |
15 | **Contributor Resources**
16 |
17 | - See the [Contributing to getnighthawk.dev Website](https://github.com/layer5io/getnighthawk/blob/master/CONTRIBUTING.md)
18 | - See the Project Site section of [GetNighthawk project doc](https://docs.google.com/document/d/1lHfMo4iIx2WXFZIspfHyxTsPR1T63_2IV5NUkgxoo0w)
19 | - 🎨 Wireframes and designs for Nighthawk Site in [Figma](https://www.figma.com/file/5ZwEkSJwUPitURD59YHMEN/Layer5-Designs?type=design&node-id=5046-0&mode=design&t=UYVaGhic2LY8EXee-0)
20 | - Meshery UI Nighthawk (Performance) in [Figma](https://www.figma.com/file/SMP3zxOjZztdOLtgN4dS2W/Meshery-UI?type=design&node-id=2-5814&mode=design&t=Gt14dmRRlpL09apZ-0)
21 | - 🙋🏾🙋🏼 Questions: [Layer5 Discussion Forum](https://discuss.layer5.io) and [Layer5 Community Slack](http://slack.layer5.io)
22 |
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature Request
3 | about: Suggest an enhancement to this project.
4 | title: ""
5 | labels: "kind/enhancement"
6 | assignees: ""
7 | ---
8 |
9 | **Current Behavior**
10 |
11 |
12 |
13 | **Desired Behavior**
14 |
15 |
16 |
17 | ---
18 |
19 | **Resources**
20 |
21 |
22 |
23 | **Alternatives / Additional Context**
24 |
25 |
26 |
27 | ---
28 |
29 | **Contributor Resources**
30 |
31 | - See the [Contributing to getnighthawk.dev Website](https://github.com/layer5io/getnighthawk/blob/master/CONTRIBUTING.md)
32 | - See the Project Site section of [GetNighthawk project doc](https://docs.google.com/document/d/1lHfMo4iIx2WXFZIspfHyxTsPR1T63_2IV5NUkgxoo0w)
33 | - 🎨 Wireframes and designs for Nighthawk Site in [Figma](https://www.figma.com/file/5ZwEkSJwUPitURD59YHMEN/Layer5-Designs?type=design&node-id=5046-0&mode=design&t=UYVaGhic2LY8EXee-0)
34 | - Meshery UI Nighthawk (Performance) in [Figma](https://www.figma.com/file/SMP3zxOjZztdOLtgN4dS2W/Meshery-UI?type=design&node-id=2-5814&mode=design&t=Gt14dmRRlpL09apZ-0)
35 | - 🙋🏾🙋🏼 Questions: [Layer5 Discussion Forum](https://discuss.layer5.io) and [Layer5 Community Slack](http://slack.layer5.io)
36 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/question.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: General question
3 | about: Request information about the project; clarify behavior of the software
4 | title: "[Question]"
5 | labels: "kind/question"
6 | assignees: ""
7 | ---
8 |
9 | **How can we help?**
10 |
11 |
12 |
13 | ---
14 |
15 | **Contributor Resources**
16 |
17 | - See the [Contributing to getnighthawk.dev Website](https://github.com/layer5io/getnighthawk/blob/master/CONTRIBUTING.md)
18 | - See the Project Site section of [GetNighthawk project doc](https://docs.google.com/document/d/1lHfMo4iIx2WXFZIspfHyxTsPR1T63_2IV5NUkgxoo0w)
19 | - 🎨 Wireframes and designs for Nighthawk Site in [Figma](https://www.figma.com/file/5ZwEkSJwUPitURD59YHMEN/Layer5-Designs?type=design&node-id=5046-0&mode=design&t=UYVaGhic2LY8EXee-0)
20 | - Meshery UI Nighthawk (Performance) in [Figma](https://www.figma.com/file/SMP3zxOjZztdOLtgN4dS2W/Meshery-UI?type=design&node-id=2-5814&mode=design&t=Gt14dmRRlpL09apZ-0)
21 | - 🙋🏾🙋🏼 Questions: [Layer5 Discussion Forum](https://discuss.layer5.io) and [Layer5 Community Slack](http://slack.layer5.io)
22 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/site_update.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Website Update
3 | about: Suggest an update to the GetNighthawk.dev website
4 | title: ""
5 | labels:
6 | - "area/website"
7 | - "framework/jekyll"
8 | assignees: ""
9 | ---
10 |
11 | **Current State of the GetNighthawk.dev site**
12 |
13 |
14 | **Desired State of the GetNighthawk.dev site**
15 |
16 |
17 | ---
18 |
19 | **Contributor Resources**
20 |
21 | - See the [Contributing to getnighthawk.dev Website](https://github.com/layer5io/getnighthawk/blob/master/CONTRIBUTING.md)
22 | - See the Project Site section of [GetNighthawk project doc](https://docs.google.com/document/d/1lHfMo4iIx2WXFZIspfHyxTsPR1T63_2IV5NUkgxoo0w)
23 | - 🎨 Wireframes and designs for Nighthawk Site in [Figma](https://www.figma.com/file/5ZwEkSJwUPitURD59YHMEN/Layer5-Designs?type=design&node-id=5046-0&mode=design&t=UYVaGhic2LY8EXee-0)
24 | - Meshery UI Nighthawk (Performance) in [Figma](https://www.figma.com/file/SMP3zxOjZztdOLtgN4dS2W/Meshery-UI?type=design&node-id=2-5814&mode=design&t=Gt14dmRRlpL09apZ-0)
25 | - 🙋🏾🙋🏼 Questions: [Layer5 Discussion Forum](https://discuss.layer5.io) and [Layer5 Community Slack](http://slack.layer5.io)
26 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | **Description**
2 |
3 | This PR fixes #
4 |
5 | **Notes for Reviewers**
6 |
7 |
8 | **[Signed commits](https://github.com/layer5io/getnighthawk/blob/master/CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin)**
9 | - [ ] Yes, I signed my commits.
10 |
11 |
12 |
24 |
--------------------------------------------------------------------------------
/.github/config.yml:
--------------------------------------------------------------------------------
1 | #-------------------------------------------------------------------------------
2 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
3 | # Comment to be posted to on first time issues
4 | newIssueWelcomeComment: >
5 | Thanks for opening this issue. A contributor will be by to give feedback soon. In the meantime, please review the [Layer5 Community Welcome Guide](https://docs.google.com/document/d/17OPtDE_rdnPQxmk2Kauhm3GwXF1R5dZ3Cj8qZLKdo5E/edit?usp=sharing) and sure to join the [community Slack](http://slack.layer5.io/).
6 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
7 | # Comment to be posted to on PRs from first time contributors in your repository
8 | newPRWelcomeComment: >
9 | Yay, your first pull request! :thumbsup: A contributor will be by to give feedback soon. In the meantime, please review the [Layer5 Community Welcome Guide](https://docs.google.com/document/d/17OPtDE_rdnPQxmk2Kauhm3GwXF1R5dZ3Cj8qZLKdo5E/edit?usp=sharing) and sure to join the [community Slack](http://slack.layer5.io/).
10 |
11 | Be sure to double-check that you have signed your commits. Here are instructions for [making signing an implicit activity while peforming a commit](../CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin).
12 |
13 |
14 | #-------------------------------------------------------------------------------
15 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
16 | # Comment to be posted to on pull requests merged by a first time user
17 | firstPRMergeComment: >
18 | Thanks for your contribution to the Layer5 community! :tada:
19 |
20 | 
21 |
22 |
23 | #-------------------------------------------------------------------------------
24 | # Configuration for request-info - https://github.com/behaviorbot/request-info
25 | # Comment to reply with
26 | requestInfoReplyComment: >
27 | Thanks for opening this issue. We welcome all input! If you could provide a little more information, this will greatly aide in its resolution. :thumbsup:
28 | # *OPTIONAL* Add a list of people whose Issues/PRs will not be commented on
29 | # keys must be GitHub usernames
30 | #requestInfoUserstoExclude:
31 | # - layer5io/maintainers
32 |
33 |
34 | #-------------------------------------------------------------------------------
35 | # Configuration for sentiment-bot - https://github.com/behaviorbot/sentiment-bot
36 | # *Required* toxicity threshold between 0 and .99 with the higher numbers being the most toxic
37 | # Anything higher than this threshold will be marked as toxic and commented on
38 | sentimentBotToxicityThreshold: .9
39 |
40 | # *Required* Comment to reply with
41 | sentimentBotReplyComment: >
42 | Please be sure to review the code of conduct and be respectful of other users. // @layer5io/maintainers
43 |
44 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: gomod
4 | directory: "/"
5 | schedule:
6 | interval: monthly
7 | open-pull-requests-limit: 5
8 | labels:
9 | - pr/dependencies
10 | - kind/chore
--------------------------------------------------------------------------------
/.github/label-commenter-config.yml:
--------------------------------------------------------------------------------
1 | comment:
2 | # header: "Please note the following requirement:"
3 | footer: "\
4 | ---\n\n
5 | > Be sure to [join the community](http://slack.layer5.io), if you haven't yet and please leave a :star: [star on the project](../stargazers) :smile:
6 | "
7 |
8 | labels:
9 | - name: issue/design required
10 | labeled:
11 | issue:
12 | body: This issue has been labeled with 'design-required'. Note that prior to commencing on implementation, a design specification needs to be created and reviewed for approval. See [Creating a Functional Specification](https://docs.google.com/document/d/1RP3IWLc-MiQS-QYasqCoVuCH7--G87p5ezE5f_nOzB8/edit?usp=sharing) to create a design spec.
13 | action: open
14 | - name: issue/remind
15 | labeled:
16 | issue:
17 | body: Checking in... it has been awhile since we've heard from you on this issue. Are you still working on it? Please let us know and please don't hesitate to contact a [MeshMate](https://layer5.io/community/meshmates/) or any other [community member](https://layer5.io/community/members) for assistance.
18 | action: open
19 | pr:
20 | body: Checking in... it has been awhile since we've heard from you on this issue. Are you still working on it? Please let us know and please don't hesitate to contact a [MeshMate](https://layer5.io/community/meshmates/) or any other [community member](https://layer5.io/community/members) for assistance.
21 | action: open
22 | - name: issue/dco
23 | labeled:
24 | issue:
25 | body: "🚨 Alert! Git Police! We couldn’t help but notice that one or more of your commits is missing a sign-off. _A what?_ A commit sign-off (your email address).\n\n
26 | To amend the commits in this PR with your signoff using the instructions provided in the DCO check above. \n\n
27 | To configure your dev environment to automatically signoff on your commits in the future, see [these instructions](https://github.com/meshery/meshery/blob/master/CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin)."
28 | action: open
29 | pr:
30 | body: "🚨 Alert! Git Police! We couldn’t help but notice that one or more of your commits is missing a sign-off. _A what?_ A commit sign-off (your email address).\n\n
31 | To amend the commits in this PR with your signoff using the instructions provided in the DCO check above. \n\n
32 | To configure your dev environment to automatically signoff on your commits in the future, see [these instructions](https://github.com/meshery/meshery/blob/master/CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin)."
33 | action: open
34 |
--------------------------------------------------------------------------------
/.github/readme/images/Layer5-Community-Sign_square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/.github/readme/images/Layer5-Community-Sign_square.png
--------------------------------------------------------------------------------
/.github/readme/images/community.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.github/readme/images/slack-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/.github/readme/images/slack-128.png
--------------------------------------------------------------------------------
/.github/readme/images/slack-dark-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/.github/readme/images/slack-dark-128.png
--------------------------------------------------------------------------------
/.github/release-drafter.yml:
--------------------------------------------------------------------------------
1 | name-template: 'v$NEXT_PATCH_VERSION'
2 | tag-template: 'v$NEXT_PATCH_VERSION'
3 | categories:
4 | - title: '🚀 Features'
5 | labels:
6 | - 'kind/feature'
7 | - 'kind/enhancement'
8 | - title: '🐛 Bug Fixes'
9 | labels:
10 | - 'kind/fix'
11 | - 'kind/bugfix'
12 | - 'kind/bug'
13 | - title: '🧰 Maintenance'
14 | label: 'kind/chore'
15 | change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
16 | template: |
17 | ## What's New
18 | $CHANGES
19 |
20 | ## Contributors
21 |
22 | Thank you to our contributors for making this release possible:
23 | $CONTRIBUTORS
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Number of days of inactivity before an issue becomes stale
2 | daysUntilStale: 45
3 | # Number of days of inactivity before a stale issue is closed
4 | daysUntilClose: 10
5 | # Issues with these labels will never be considered stale
6 | exemptLabels:
7 | - issue/willfix
8 | # Label to use when marking an issue as stale
9 | staleLabel: issue/stale
10 | # Comment to post when marking an issue as stale. Set to `false` to disable
11 | markComment: >
12 | This issue has been automatically marked as stale because it has not had
13 | recent activity. It will be closed if no further activity occurs. Thank you
14 | for your contributions.
15 | # Comment to post when closing a stale issue. Set to `false` to disable
16 | closeComment: >
17 | This issue is being automatically closed due to inactivity.
18 | However, you may choose to reopen this issue.
19 |
--------------------------------------------------------------------------------
/.github/welcome/Layer5-celebration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/.github/welcome/Layer5-celebration.png
--------------------------------------------------------------------------------
/.github/workflows/build-and-publish.yaml:
--------------------------------------------------------------------------------
1 | name: Build and Publish Nighthawk Binaries
2 | on:
3 | workflow_dispatch:
4 | inputs:
5 | version:
6 | description: 'Version of GetNighthawk to be released'
7 | required: true
8 | default: 'stable'
9 | nighthawk_version:
10 | description: 'Version of Nighthawk to build'
11 | required: true
12 | default: 'main'
13 |
14 | jobs:
15 | release:
16 | name: Create Release
17 | runs-on: ubuntu-latest
18 | steps:
19 | - name: Setup Release Assets
20 | id: create_release
21 | uses: ncipollo/release-action@v1
22 | if: startsWith(github.ref, 'refs/tags/') && success()
23 | with:
24 | token: ${{ secrets.GH_ACCESS_TOKEN }}
25 | tag: ${{ github.event.inputs.version }}
26 | name: GetNighthawk ${{ github.event.inputs.version }}
27 | allowUpdates: true
28 | omitNameDuringUpdate: true
29 | replacesArtifacts: true
30 | build-and-publish:
31 | name: Build and Publish Nighthawk
32 | needs: [release]
33 | strategy:
34 | max-parallel: 10
35 | matrix:
36 | os: [ubuntu-latest,]
37 | architecture: [amd64]
38 | runs-on: ${{ matrix.os }}
39 | steps:
40 | - name: Checkout Nighthawk
41 | uses: actions/checkout@v2
42 | with:
43 | repository: 'envoyproxy/nighthawk'
44 | ref: ${{ github.event.inputs.nighthawk_version }}
45 | token: ${{ secrets.GH_ACCESS_TOKEN }}
46 | - name: Setup Golang
47 | uses: actions/setup-go@v2
48 | with:
49 | go-version: '^1.13.1'
50 | - name: Build and Publish Assets
51 | uses: layer5io/getnighthawk@master
52 | with:
53 | repo: layer5io/getnighthawk
54 | version: ${{ github.event.inputs.version }}
55 | token: ${{ secrets.GH_ACCESS_TOKEN }}
56 | os: ${{ matrix.os }}
57 | architecture: ${{ matrix.architecture }}
58 | - name: Login to Docker
59 | if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master') && success()
60 | uses: azure/docker-login@v1
61 | with:
62 | username: ${{ secrets.DOCKER_USERNAME }}
63 | password: ${{ secrets.DOCKER_PASSWORD }}
64 | - name: Checkout GetNighthawk
65 | uses: actions/checkout@v2
66 | with:
67 | repository: 'layer5io/getnighthawk'
68 | - name: Build and Tag Docker Image
69 | run: |
70 | chmod +x ./ci/docker_build.sh
71 | ./ci/docker_build.sh
72 | docker tag envoyproxy/nighthawk-dev:latest ${{ secrets.IMAGE_NAME }}:latest
73 | docker tag ${{ secrets.IMAGE_NAME }}:latest ${{ secrets.IMAGE_NAME }}:${{ github.event.inputs.version }}
74 | - name: Push Docker Image
75 | run: |
76 | docker push ${{ secrets.IMAGE_NAME }}:latest
77 | docker push ${{ secrets.IMAGE_NAME }}:${{ github.event.inputs.version }}
78 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: Nighthawk-Go
2 | on:
3 | push:
4 | branches:
5 | - 'master'
6 | tags:
7 | - 'v*'
8 | pull_request:
9 | branches:
10 | - 'master'
11 |
12 | jobs:
13 | golangci:
14 | name: lint
15 | runs-on: ubuntu-latest
16 | steps:
17 | - uses: actions/checkout@v2
18 | - name: golangci-lint
19 | uses: golangci/golangci-lint-action@v2
20 | with:
21 | # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
22 | version: v1.32
23 |
24 | # Optional: working directory, useful for monorepos
25 | # working-directory: somedir
26 |
27 | # Optional: golangci-lint command line arguments.
28 | # args: --issues-exit-code=0
29 |
30 | # Optional: show only new issues if it's a pull request. The default value is `false`.
31 | only-new-issues: true
32 | build:
33 | strategy:
34 | matrix:
35 | go-version: [1.14.x]
36 | platform: [ubuntu-latest]
37 | runs-on: ${{ matrix.platform }}
38 | steps:
39 | - name: Check out code
40 | uses: actions/checkout@v2
41 | with:
42 | fetch-depth: 1
43 | - name: Setup Go
44 | uses: actions/setup-go@v2
45 | with:
46 | go-version: ${{ matrix.go-version }}
47 | - name: start build
48 | run: |
49 | chmod +x ./ci/build.sh
50 | ./ci/build.sh
51 | /usr/local/bin/bazel version
52 | bazel version
53 | go get -u github.com/bazelbuild/buildtools/buildifier
54 | export BUILDIFIER_BIN=$GOPATH/bin/buildifier
55 | go get -u github.com/bazelbuild/buildtools/buildozer
56 | export BUILDOZER_BIN=$GOPATH/bin/buildozer
57 | test-assets:
58 | strategy:
59 | matrix:
60 | go-version: [1.14.x]
61 | platform: [ubuntu-latest]
62 | runs-on: ${{ matrix.platform }}
63 | steps:
64 | - name: Check out code
65 | uses: actions/checkout@v2
66 | with:
67 | fetch-depth: 1
68 | - name: Setup Go
69 | uses: actions/setup-go@v2
70 | with:
71 | go-version: ${{ matrix.go-version }}
72 | - name: start build
73 | run: |
74 | chmod +x ./apinighthawk/bin/nighthawk_client
75 | cd apinighthawk
76 | export PATH=$PATH:$(pwd)/bin
77 | cd bin
78 | chmod +x nighthawk_client
79 | nighthawk_client --rps 1 --concurrency 1 --duration 10 https://github.com/layer5io/meshery --output-format experimental_fortio_pedantic
80 | exit 0
81 |
--------------------------------------------------------------------------------
/.github/workflows/invitations.yml:
--------------------------------------------------------------------------------
1 | name: Invite User to GH Org
2 | on:
3 | issues:
4 | types: [labeled]
5 |
6 | jobs:
7 | automate_invite:
8 | if: contains(github.event.issue.labels.*.name, 'issue/invite')
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Invite on label
12 | uses: vj-abigo/invite-on-label@v1.2
13 | with:
14 | organization: layer5io
15 | label: issue/invite
16 | repo-token: ${{ secrets.GITHUB_TOKEN }}
17 | comment: "We are sending you an invitation to join the Layer5 GitHub Organization. :partying_face: Welcome to the community! 🎉
Be sure to :star: [star the projects](../stargazers), if you haven't already.
"
18 | env:
19 | INVITE_TOKEN: ${{ secrets.RELEASEDRAFTER_PAT }}
20 |
21 | - name: View context attributes
22 | uses: actions/github-script@v4
23 | id: set-url
24 | with:
25 | script: |
26 | const url = context.issue.url
27 | return url
28 | result-encoding: string
29 |
30 | - name: Get url
31 | run: |
32 | echo "URL=${{steps.set-url.outputs.result}}" >> $GITHUB_ENV
33 | echo "ISSUE=${{steps.set-url.outputs.url}}" >> $GITHUB_ENV
34 |
35 | - name: Notify slack
36 | env:
37 | SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
38 | uses: pullreminders/slack-action@master
39 | with:
40 | args: '{\"channel\":\"CF9RK4H89\",\"text\":\"An invitation to join the layer5io GitHub org has been sent\"}'
41 | # to the author of: ${{env.URL}}\"}'
42 |
--------------------------------------------------------------------------------
/.github/workflows/label-commenter.yml:
--------------------------------------------------------------------------------
1 | name: Label Commenter
2 |
3 | on:
4 | issues:
5 | types:
6 | - labeled
7 |
8 | pull_request_target:
9 | types:
10 | - labeled
11 |
12 | permissions:
13 | contents: read
14 | issues: write
15 | pull-requests: write
16 |
17 | jobs:
18 | comment:
19 | runs-on: ubuntu-18.04
20 | steps:
21 | - uses: actions/checkout@v2
22 | with:
23 | ref: master # Set your default branch
24 |
25 | - name: Label Commenter
26 | uses: peaceiris/actions-label-commenter@v1
--------------------------------------------------------------------------------
/.github/workflows/newcomer-alert.yml:
--------------------------------------------------------------------------------
1 | name: Newcomers Alert
2 | on:
3 | issues:
4 | types: [labeled]
5 | jobs:
6 | good-first-issue-notify:
7 | if: github.event.label.name == 'good first issue' || github.event.label.name == 'first-timers-only'
8 | name: Notify Slack for new good-first-issue
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Notify slack
12 | env:
13 | SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
14 | uses: pullreminders/slack-action@master
15 | with:
16 | args: '{\"channel\":\"C019426UBNY\",\"text\":\"A good first issue label was just added to ${{github.event.issue.html_url}}.\"}'
--------------------------------------------------------------------------------
/.github/workflows/release-drafter.yml:
--------------------------------------------------------------------------------
1 | name: Release Drafter
2 |
3 | on:
4 | push:
5 | # our release branch
6 | branches:
7 | - master
8 |
9 | jobs:
10 | update_release_draft:
11 | runs-on: ubuntu-latest
12 | steps:
13 | # Drafts your next Release notes as Pull Requests are merged into "master"
14 | - uses: release-drafter/release-drafter@v5
15 | with:
16 | config-name: release-drafter.yml
17 | env:
18 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.github/workflows/slack.yml:
--------------------------------------------------------------------------------
1 | name: Slack Notify on Star
2 | on: watch
3 | jobs:
4 | star-notify:
5 | name: Notify Slack on star
6 | runs-on: ubuntu-latest
7 | steps:
8 | - name: Get current star count
9 | run: |
10 | echo "STARS=$(curl --silent 'https://api.github.com/repos/${{github.repository}}' -H 'Accept: application/vnd.github.preview' | jq '.stargazers_count')" >> $GITHUB_ENV
11 | - name: Notify slack
12 | env:
13 | SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
14 | uses: pullreminders/slack-action@master
15 | with:
16 | args: '{\"channel\":\"CSK7N9TGX\",\"text\":\"${{ github.actor }} just starred ${{github.repository}}! (https://github.com/${{github.repository}}/stargazers) Total ⭐️: ${{env.STARS}}\"}'
17 |
--------------------------------------------------------------------------------
/.github/workflows/updateDiscussons.yml:
--------------------------------------------------------------------------------
1 | name: Discussion data files update
2 |
3 | on:
4 | workflow_dispatch:
5 | schedule:
6 | - cron: '0 0 * * *' #runs every day at midnight
7 |
8 | jobs:
9 | update:
10 | runs-on: ubuntu-latest
11 | if: github.repository == 'layer5io/getnighthawk'
12 | steps:
13 | - name: Checkout
14 | uses: actions/checkout@v3
15 | with:
16 | token: ${{ secrets.GH_ACCESS_TOKEN }}
17 | - name: Fetch data for nighthawk tag
18 | run: curl https://discuss.layer5.io/tag/nighthawk.json -o docs/_data/discuss/nighthawk.json
19 | - name: Commit results
20 | uses: stefanzweifel/git-auto-commit-action@v4
21 | with:
22 | commit_user_name: l5io
23 | commit_user_email: ci@layer5.io
24 | commit_author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
25 | commit_options: "--signoff"
26 | commit_message: "Updated nighthawk.json with new discussion posts"
27 | branch: master
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Binaries for programs and plugins
2 | *.exe
3 | *.exe~
4 | *.dll
5 | *.so
6 | *.dylib
7 |
8 | # Test binary, built with `go test -c`
9 | *.test
10 |
11 | # Output of the go coverage tool, specifically when used with LiteIDE
12 | *.out
13 |
14 | # Dependency directories (remove the comment below to include it)
15 | # vendor/
16 |
17 | # Ignore OS-X Trash
18 | *.DS_Store
19 |
20 | .idea/
21 |
22 | .vscode/
--------------------------------------------------------------------------------
/.golangci.yml:
--------------------------------------------------------------------------------
1 | linters-settings:
2 | depguard:
3 | list-type: blacklist
4 | packages:
5 | # logging is allowed only by logutils.Log, logrus
6 | # is allowed to use only in logutils package
7 | - github.com/sirupsen/logrus
8 | packages-with-error-message:
9 | - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log"
10 | dupl:
11 | threshold: 100
12 | exhaustive:
13 | default-signifies-exhaustive: false
14 | funlen:
15 | lines: 100
16 | statements: 50
17 | gci:
18 | local-prefixes: github.com/golangci/golangci-lint
19 | goconst:
20 | min-len: 2
21 | min-occurrences: 2
22 | gocritic:
23 | enabled-tags:
24 | - diagnostic
25 | - experimental
26 | - opinionated
27 | - performance
28 | - style
29 | disabled-checks:
30 | - dupImport # https://github.com/go-critic/go-critic/issues/845
31 | - ifElseChain
32 | - octalLiteral
33 | - whyNoLint
34 | - wrapperFunc
35 | gocyclo:
36 | min-complexity: 15
37 | goimports:
38 | local-prefixes: github.com/golangci/golangci-lint
39 | golint:
40 | min-confidence: 0
41 | gomnd:
42 | settings:
43 | mnd:
44 | # don't include the "operation" and "assign"
45 | checks: argument,case,condition,return
46 | gosec:
47 | settings:
48 | exclude: -G204
49 | govet:
50 | check-shadowing: true
51 | settings:
52 | printf:
53 | funcs:
54 | - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
55 | - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
56 | - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
57 | - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
58 | lll:
59 | line-length: 140
60 | maligned:
61 | suggest-new: true
62 | misspell:
63 | locale: US
64 | nolintlint:
65 | allow-leading-space: true # don't require machine-readable nolint directives (i.e. with no leading space)
66 | allow-unused: false # report any unused nolint directives
67 | require-explanation: false # don't require an explanation for nolint directives
68 | require-specific: false # don't require nolint directives to be specific about which linter is being skipped
69 |
70 | linters:
71 | # please, do not use `enable-all`: it's deprecated and will be removed soon.
72 | # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint
73 | disable-all: true
74 | enable:
75 | - bodyclose
76 | - deadcode
77 | - dogsled
78 | - dupl
79 | - errcheck
80 | - exhaustive
81 | - funlen
82 | - goconst
83 | - gocritic
84 | - gocyclo
85 | - gofmt
86 | - goimports
87 | - golint
88 | - gomnd
89 | - goprintffuncname
90 | - gosimple
91 | - govet
92 | - ineffassign
93 | - interfacer
94 | - lll
95 | - misspell
96 | - nakedret
97 | - noctx
98 | - nolintlint
99 | - rowserrcheck
100 | - scopelint
101 | - staticcheck
102 | - structcheck
103 | - stylecheck
104 | - typecheck
105 | - unconvert
106 | - unparam
107 | - unused
108 | - varcheck
109 | - whitespace
110 |
111 | # don't enable:
112 | # - asciicheck
113 | # - gochecknoglobals
114 | # - gocognit
115 | # - godot
116 | # - godox
117 | # - goerr113
118 | # - maligned
119 | # - nestif
120 | # - prealloc
121 | # - testpackage
122 | # - wsl
123 |
124 | issues:
125 | # Excluding configuration per-path, per-linter, per-text and per-source
126 | exclude-rules:
127 | - path: _test\.go
128 | linters:
129 | - gomnd
130 |
131 | # https://github.com/go-critic/go-critic/issues/926
132 | - linters:
133 | - gocritic
134 | text: "unnecessaryDefer:"
135 |
136 | run:
137 | skip-dirs:
138 | - test/testdata_etc
139 | - internal/cache
140 | - internal/renameio
141 | - internal/robustio
142 |
143 | # golangci.com configuration
144 | # https://github.com/golangci/golangci/wiki/Configuration
145 | service:
146 | golangci-lint-version: 1.23.x # use the fixed version to not introduce new linters unexpectedly
147 | prepare:
148 | - echo "here I can run custom commands, but no preparation needed for this repo"
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | getnighthawk.dev
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Layer5 Community Code of Conduct
2 |
3 | The Layer5 community follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).
4 |
5 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting community@layer5.io.
6 |
--------------------------------------------------------------------------------
/CONTRIBUTING-gitflow.md:
--------------------------------------------------------------------------------
1 | # Working by Forking
2 | Just head over to the GitHub page and click the "Fork" button. It's just that simple. Once you've done that, you can use your favorite git client to clone your repo or just head straight to the command line:
3 |
4 | ## Clone your fork to your local machine
5 | Run the below command on your local machine( Replace USERNAME with your GitHub username ):
6 | ```
7 | git clone git@github.com:USERNAME/getnighthawk.git
8 | ```
9 | Keeping Your Fork Up to Date
10 | While this isn't an absolutely necessary step, if you plan on doing anything more than just a tiny quick fix, you'll want to make sure you keep your fork up to date by tracking the original "upstream" repo that you forked. To do this, you'll need to add a remote:
11 |
12 | ## Add 'upstream' repo to list of remotes
13 | ```
14 | git remote add upstream https://github.com/layer5io/getnighthawk.git
15 | ```
16 |
17 |
18 | ## Verify the new remote named 'upstream'
19 | ```
20 | git remote -v
21 | ```
22 | Whenever you want to update your fork with the latest upstream changes, you'll need to first fetch the upstream repo's branches and latest commits to bring them into your repository:
23 |
24 | ## Fetch from upstream remote
25 | ```
26 | git fetch upstream
27 | ```
28 |
29 | ## View all branches, including those from upstream
30 | ```
31 | git branch -va
32 | ```
33 | Now, checkout your own master branch and merge the upstream repo's master branch:
34 |
35 | ## Checkout your master branch and merge upstream
36 | ```
37 | git checkout master
38 | git merge upstream/master
39 | ```
40 | If there are no unique commits on the local master branch, git will simply perform a fast-forward. However, if you have been making changes on master (in the vast majority of cases you probably shouldn't be - see the next section, you may have to deal with conflicts. When doing so, be careful to respect the changes made upstream.
41 |
42 | Now, your local master branch is up-to-date with everything modified upstream.
43 |
44 | **Create a Branch** (doing your work)
45 | Whenever you begin work on a new feature or bugfix, it's important that you create a new branch. Not only is it proper git workflow, but it also keeps your changes organized and separated from the master branch so that you can easily submit and manage multiple pull requests for every task you complete.
46 |
47 | To create a new branch and start working on it, peform the following flow.
48 |
49 | ## Checkout the master branch - you want your new branch to come from master
50 | ```
51 | git checkout master
52 | ```
53 |
54 | ## Create a new branch (give your branch its own simple informative name)
55 | For enhancements use `feature/your_username/issue#` or `feature/your_username/name_of_feature`
56 |
57 | For bugs use `bug/your_username/issue#` or `bug/your_username/name_of_bug`
58 |
59 | ```
60 | git branch feature/jdoe/567
61 | ```
62 |
63 | ## Switch to your new branch
64 | ```
65 | git checkout feature/jdoe/567
66 | ```
67 | Now, go to town hacking away and making whatever changes you want to.
68 |
69 | ## Submitting your changes (a Pull Request)
70 | Prior to submitting your pull request, you might want to do a few things to clean up your branch and make it as simple as possible for the original repo's maintainer to test, accept, and merge your work.
71 |
72 | In the time that you've been working on your changes, if any commits have been made to the upstream master branch, you will need to rebase your development branch so that merging it will be a simple fast-forward that won't require any conflict resolution work.
73 |
74 | ## Fetch upstream master and merge with your repo's master branch
75 | ```
76 | git fetch upstream
77 | git checkout master
78 | git merge upstream/master
79 | ```
80 |
81 | ## If there were any new commits, rebase your development branch
82 | ```
83 | git checkout feature/jdoe/567
84 | git rebase master
85 | ```
86 | Now, it may be desirable to squash some of your smaller commits down into a small number of larger more cohesive commits. You can do this with an interactive rebase:
87 |
88 | ## Rebase all commits on your development branch
89 | ```
90 | git checkout
91 | git rebase -i master
92 | ```
93 | This will open up a text editor where you can specify which commits to squash.
94 |
95 | ## Submitting
96 | Once you've committed and pushed all of your changes to GitHub, go to the page for your fork on GitHub, select your development branch, and click the pull request button. If you need to make any adjustments to your pull request, just push the updates to GitHub. Your pull request will automatically track the changes on your development branch and update.
97 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | # Building GetNighthawk
2 |
3 | jekyll=bundle exec jekyll
4 |
5 | site:
6 | cd docs; $(jekyll) serve --drafts --livereload --config _config.yml
7 |
8 | setup:
9 | docker pull envoyproxy/nighthawk-dev; cd cmd; go mod tidy;
10 | run:
11 | go run cmd/main.go
12 |
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Nighthawk
4 |
5 | - Project site: https://getnighthawk.dev
6 | - Project doc: https://docs.google.com/document/d/1lHfMo4iIx2WXFZIspfHyxTsPR1T63_2IV5NUkgxoo0w/edit#
7 | - Project Slack: http://slack.layer5.io
8 |
9 | ## What is Nighthawk?
10 |
11 | Nighthawk is a versatile HTTP load testing tool built out of a need to drill HTTP services with a constant request rate or with an adaptive request rate. Layer5 offers a custom distribution of Nighthawk with intelligent adaptive load controllers to automatically identify optimal configurations for your service mesh deployment. As a Layer 7 performance characterization tool supporting HTTP/HTTPS/HTTP2, Nighthawk is Meshery’s (and Envoy’s) load generator and is written in C++.
12 |
13 | ## Nighthawk and Meshery
14 |
15 | Meshery integrates Nighthawk as one of (currently) three choices of load generator for characterizing and managing the performance of service meshes and their workloads.
16 | Centric to the advancement of Nighthawk is the Meshery and Service Mesh Performance projects, which enable Nighthawk’s standards-based distributed performance management. The intersection of these projects allow researchers and users to conveniently identify the optimal service mesh configuration while considering their specific environment, application and load. Meshery orchestrates multiple instances of Nighthawk (horizontal scaling) and provides an easy to use interface for Nighthawk’s adaptive load controller capability.
17 |
18 | ---
19 | ---
20 |
21 | # Go-Nighthawk
22 |
23 | Nighthawk adapter to run service mesh load tests with Meshery.
24 |
25 | ## Load Generators in Meshery
26 |
27 | Users may prefer to use one load generator over the next given the difference of capabilities between load generators, so Meshery provides a load generator interface (a gRPC interface) behind which a load generator can be implemented. Meshery provides users with choice of which load generator they prefer to use for a given performance test. Users may set their configure their own preference of load generator different that the default load generator.
28 |
29 | ### What function do load generators in Meshery provide?
30 |
31 | Load generators will provide the capability to run load tests from Meshery. As of today the load generators are embedded as libraries in Meshery and Meshery invokes the load generators APIs with the right load test options to run the load test. At the moment, Meshery has support for HTTP load generators. Support for GRPC and TCP load testing is on the roadmap. Meshery has functional integration with `fortio`, `wrk2`, and `nighthawk`.
32 |
33 | ### Why support multiple load generators?
34 |
35 | Different use cases and different opinions call for different approaches to statistical analysis of the performance results. For example, wrk2 accounts for a concept called Coordinated Omission.
36 |
37 | ### Which are currently supported?
38 |
39 | `fortio` - Fortio load testing library, command line tool, advanced echo server and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats.
40 | `wrk2` - A constant throughput, correct latency recording variant of wrk.
41 | `nighthawk` - Enables users to run distributed performance tests to better mimic real-world, distributed systems scenarios.
42 |
43 |
MeshMates are experienced Layer5 community members, who will help you learn your way around, discover live projects and expand your community network. 55 | Become a Meshtee today!
56 | 57 | Find out more on the Layer5 community.
75 | ✔️ Join any or all of the weekly meetings on community calendar.
76 | ✔️ Watch community meeting recordings.
77 | ✔️ Access the Community Drive by completing a community Member Form.
78 | ✔️ Discuss in the Community Forum.
79 |
81 | Not sure where to start? Grab an open issue with the help-wanted label. 82 |
83 | -------------------------------------------------------------------------------- /WORKSPACE: -------------------------------------------------------------------------------- 1 | # Workspace file for running Bazel commands 2 | 3 | workspace(name = "nighthawk") 4 | 5 | load("//bazel:repositories.bzl", "nighthawk_dependencies") 6 | 7 | nighthawk_dependencies() 8 | 9 | local_repository( 10 | name = "envoy_build_config", 11 | path = ".", 12 | ) 13 | 14 | load("@envoy//bazel:api_binding.bzl", "envoy_api_binding") 15 | 16 | envoy_api_binding() 17 | 18 | load("@envoy//bazel:api_repositories.bzl", "envoy_api_dependencies") 19 | 20 | envoy_api_dependencies() 21 | 22 | load("@envoy//bazel:repositories.bzl", "envoy_dependencies") 23 | 24 | envoy_dependencies() 25 | 26 | load("@envoy//bazel:repositories_extra.bzl", "envoy_dependencies_extra") 27 | 28 | envoy_dependencies_extra() 29 | 30 | load("@envoy//bazel:dependency_imports.bzl", "envoy_dependency_imports") 31 | 32 | envoy_dependency_imports() 33 | 34 | # For PIP support: 35 | load("@rules_python//python:pip.bzl", "pip_install") 36 | 37 | # This rule translates the specified requirements.txt into 38 | # @my_deps//:requirements.bzl, which itself exposes a pip_install method. 39 | pip_install( 40 | name = "python_pip_deps", 41 | requirements = "//:requirements.txt", 42 | ) 43 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Getnighthawk Layer5' 2 | description: 'Publish getnighthawk assets' 3 | 4 | inputs: 5 | repo: 6 | description: 'org/repo to publish actions to' 7 | required: false 8 | default: '' 9 | version: 10 | description: 'version of the release' 11 | required: false 12 | default: 'latest' 13 | token: 14 | description: 'optional Personal Access Token to access external repository' 15 | required: false 16 | default: '' 17 | os: 18 | description: 'Build Operating System. Eg: ubuntu-18.04, macos-latest....' 19 | required: false 20 | architecture: 21 | description: 'Build Architecture. Eg: amd64,arm...' 22 | required: false 23 | 24 | runs: 25 | using: "composite" 26 | steps: 27 | - run: ${{ github.action_path }}/scripts/setup.sh 28 | env: 29 | INPUT_OS: ${{ inputs.os }} 30 | INPUT_ARCHITECTURE: ${{ inputs.architecture }} 31 | shell: bash 32 | - run: ${{ github.action_path }}/scripts/build.sh 33 | shell: bash 34 | - run: ${{ github.action_path }}/scripts/verify.sh 35 | shell: bash 36 | - run: ${{ github.action_path }}/scripts/publish.sh 37 | env: 38 | INPUT_REPO: ${{ inputs.repo }} 39 | INPUT_VERSION: ${{ inputs.version }} 40 | INPUT_TOKEN: ${{ inputs.token }} 41 | INPUT_OS: ${{ inputs.os }} 42 | INPUT_ARCHITECTURE: ${{ inputs.architecture }} 43 | shell: bash 44 | 45 | outputs: 46 | version: 47 | description: 'The version of the release or tag' 48 | 49 | branding: 50 | icon: 'download-cloud' 51 | color: 'blue' -------------------------------------------------------------------------------- /apinighthawk/bin/nighthawk_client: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/apinighthawk/bin/nighthawk_client -------------------------------------------------------------------------------- /apinighthawk/bin/nighthawk_output_transform: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/apinighthawk/bin/nighthawk_output_transform -------------------------------------------------------------------------------- /apinighthawk/bin/nighthawk_service: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/apinighthawk/bin/nighthawk_service -------------------------------------------------------------------------------- /apinighthawk/bin/nighthawk_test_server: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/layer5io/getnighthawk/beda8039c57c1e6b951688b32df1dfe2ef1885d8/apinighthawk/bin/nighthawk_test_server -------------------------------------------------------------------------------- /apinighthawk/nighthawk.go: -------------------------------------------------------------------------------- 1 | // Package apinighthawk defines nighthawk runner and config 2 | package apinighthawk 3 | 4 | import ( 5 | "fmt" 6 | "net/url" 7 | "os/exec" 8 | "strconv" 9 | 10 | "github.com/pkg/errors" 11 | log "github.com/sirupsen/logrus" 12 | ) 13 | 14 | // NighthawkConfig describes the configuration structure for loadtest 15 | type NighthawkConfig struct { 16 | Thread int 17 | DurationInSeconds float64 18 | QPS float64 19 | URL string 20 | } 21 | 22 | // NighthawkRun function runs the nighthawk loadtest 23 | func NighthawkRun(config *NighthawkConfig) ([]byte, error) { 24 | rURL, _ := url.Parse(config.URL) 25 | if !rURL.IsAbs() { 26 | err := fmt.Errorf("please give a valid URL %s", config.URL) 27 | log.Error(err) 28 | return nil, err 29 | } 30 | 31 | duration := strconv.FormatFloat(config.DurationInSeconds, 'f', -1, 64) 32 | qps := strconv.FormatFloat(config.QPS, 'f', -1, 64) 33 | c := strconv.Itoa(config.Thread) 34 | 35 | args := []string{"--rps " + qps, 36 | "--connections " + c, 37 | "--duration " + duration, 38 | rURL.String(), 39 | "--output-format experimental_fortio_pedantic"} 40 | 41 | log.Info("Received arguments for run", args) 42 | 43 | out, err := exec.Command("nighthawk_client", 44 | "--rps "+qps, 45 | "--concurrency 1", 46 | "--connections "+c, 47 | "--duration "+duration, 48 | rURL.String(), 49 | "--output-format experimental_fortio_pedantic").Output() 50 | 51 | if err != nil { 52 | msg := "Unable to run load-test" 53 | err = errors.Wrapf(err, msg) 54 | log.Error(err) 55 | return nil, err 56 | } 57 | 58 | return out, nil 59 | } 60 | -------------------------------------------------------------------------------- /ci/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | 3 | ##################################### 4 | # 5 | # Build nighthawk binary 6 | # 7 | ##################################### 8 | 9 | sudo wget -O /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64 10 | sudo chmod +x /usr/local/bin/bazel 11 | 12 | sudo apt-get install \ 13 | libtool \ 14 | cmake \ 15 | automake \ 16 | autoconf \ 17 | make \ 18 | ninja-build \ 19 | curl \ 20 | unzip \ 21 | virtualenv -------------------------------------------------------------------------------- /ci/docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Builds a docker image nighthawk-dev:latest containing the stripped binaries 4 | # based on a pre-build bazel-bin directory (with "-c opt" set). 5 | 6 | # Stop on errors. 7 | set -e 8 | 9 | # NOTE: explicit no -x for verbose commands. Because this is run in CI, doing so may result in 10 | # publishing sensitive information into public CI logs if someone makes a change in a 11 | # consuming script that is off guard. 12 | 13 | DOCKER_NAME="nighthawk" 14 | DOCKER_IMAGE_PREFIX="envoyproxy/${DOCKER_NAME}" 15 | BINARIES=(nighthawk_test_server nighthawk_client nighthawk_service nighthawk_output_transform) 16 | BAZEL_BIN="$(bazel info -c opt bazel-bin)" 17 | WORKSPACE="$(bazel info workspace)" 18 | TMP_DIR="${WORKSPACE}/tmp-docker-build-context" 19 | 20 | rm -rf "${TMP_DIR}" 21 | 22 | echo "Preparing docker build context in ${TMP_DIR}" 23 | cp -r "${WORKSPACE}/ci/docker/" "${TMP_DIR}/" 24 | 25 | for BINARY in "${BINARIES[@]}"; do 26 | echo "Copy and strip ${BINARY}" 27 | TARGET="${TMP_DIR}/${BINARY}" 28 | # Docker won't follow symlinks 29 | cp "${BAZEL_BIN}/${BINARY}" "${TARGET}" 30 | chmod +w "${TARGET}" 31 | strip --strip-debug "${TARGET}" 32 | done 33 | 34 | cd "${TMP_DIR}" 35 | echo "running docker build ... " 36 | docker build -f "${TMP_DIR}/Dockerfile-${DOCKER_NAME}" -t "${DOCKER_IMAGE_PREFIX}-dev:latest" . 37 | rm -rf "${TMP_DIR}" 38 | echo "docker build finished" 39 | -------------------------------------------------------------------------------- /cmd/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "os" 6 | 7 | "github.com/layer5io/nighthawk-go/apinighthawk" 8 | // "fortio.org/fortio/fhttp" 9 | "fortio.org/fortio/periodic" 10 | "github.com/pkg/errors" 11 | log "github.com/sirupsen/logrus" 12 | ) 13 | 14 | func init() { 15 | // Log as JSON instead of the default ASCII formatter. 16 | log.SetFormatter(&log.JSONFormatter{}) 17 | 18 | // Output to stdout instead of the default stderr 19 | log.SetOutput(os.Stdout) 20 | } 21 | func main() { 22 | // Duration in seconds nighthawk default format 23 | testConfig := &apinighthawk.NighthawkConfig{ 24 | Thread: 2, 25 | DurationInSeconds: 5, 26 | QPS: 2, 27 | URL: "https://www.github.com", 28 | } 29 | 30 | result, err := apinighthawk.NighthawkRun(testConfig) 31 | 32 | if err != nil { 33 | msg := "Failed to run load-test" 34 | err = errors.Wrapf(err, msg) 35 | log.Fatal(err) 36 | } 37 | 38 | var result1 periodic.RunnerResults 39 | 40 | err = json.Unmarshal(result, &result1) 41 | 42 | if err != nil { 43 | err = errors.Wrap(err, "Error while unmarshaling Nighthawk results to the FortioHTTPRunner") 44 | log.Fatal(err) 45 | } 46 | 47 | resultsMap := map[string]interface{}{} 48 | err = json.Unmarshal(result, &resultsMap) 49 | 50 | if err != nil { 51 | err = errors.Wrap(err, "Error while unmarshaling Nighthawk results to map") 52 | log.Fatal(err) 53 | } 54 | 55 | log.Infof("Mapped version of the test: %+#v", resultsMap) 56 | } 57 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .jekyll-cache -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Not Found 3 | description: This does not exist 4 | permalink: /404.html 5 | sitemap: false 6 | --- 7 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | getnighthawk.dev -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | # Hello! This is where you manage which Jekyll version is used to run. 3 | # When you want to use a different version, change it below, save the 4 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: 5 | # 6 | # bundle exec jekyll serve 7 | # 8 | # This will help ensure the proper Jekyll version is running. 9 | # Happy Jekylling! 10 | gem "jekyll", "~> 4.1.1" 11 | # This is the default theme for new Jekyll sites. You may change this to anything you like. 12 | #gem "minima", "~> 2.5" 13 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and 14 | # uncomment the line below. To upgrade, run `bundle update github-pages`. 15 | # gem "github-pages", group: :jekyll_plugins 16 | # If you have any plugins, put them here! 17 | group :jekyll_plugins do 18 | #gem "jekyll-assets" 19 | gem "jekyll-minifier" 20 | gem "jekyll-sitemap" 21 | gem "jekyll-seo-tag" 22 | gem "jekyll-redirect-from" 23 | gem "jekyll-archives" 24 | gem "jekyll-feed" 25 | gem "jekyll-paginate" 26 | end 27 | 28 | # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem 29 | # and associated library. 30 | platforms :mingw, :x64_mingw, :mswin, :jruby do 31 | gem "tzinfo", "~> 1.2" 32 | gem "tzinfo-data" 33 | end 34 | 35 | # Performance-booster for watching directories on Windows 36 | # gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] 37 | gem "webrick", "~> 1.7" 38 | -------------------------------------------------------------------------------- /docs/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | addressable (2.8.0) 5 | public_suffix (>= 2.0.2, < 5.0) 6 | colorator (1.1.0) 7 | concurrent-ruby (1.1.8) 8 | cssminify2 (2.0.1) 9 | em-websocket (0.5.2) 10 | eventmachine (>= 0.12.9) 11 | http_parser.rb (~> 0.6.0) 12 | eventmachine (1.2.7) 13 | eventmachine (1.2.7-x64-mingw32) 14 | execjs (2.7.0) 15 | ffi (1.15.0) 16 | ffi (1.15.0-x64-mingw32) 17 | forwardable-extended (2.6.0) 18 | htmlcompressor (0.4.0) 19 | http_parser.rb (0.6.0) 20 | i18n (1.8.10) 21 | concurrent-ruby (~> 1.0) 22 | jekyll (4.1.1) 23 | addressable (~> 2.4) 24 | colorator (~> 1.0) 25 | em-websocket (~> 0.5) 26 | i18n (~> 1.0) 27 | jekyll-sass-converter (~> 2.0) 28 | jekyll-watch (~> 2.0) 29 | kramdown (~> 2.1) 30 | kramdown-parser-gfm (~> 1.0) 31 | liquid (~> 4.0) 32 | mercenary (~> 0.4.0) 33 | pathutil (~> 0.9) 34 | rouge (~> 3.0) 35 | safe_yaml (~> 1.0) 36 | terminal-table (~> 1.8) 37 | jekyll-archives (2.2.1) 38 | jekyll (>= 3.6, < 5.0) 39 | jekyll-feed (0.15.1) 40 | jekyll (>= 3.7, < 5.0) 41 | jekyll-minifier (0.1.10) 42 | cssminify2 (~> 2.0) 43 | htmlcompressor (~> 0.4) 44 | jekyll (>= 3.5) 45 | json-minify (~> 0.0.3) 46 | uglifier (~> 4.1) 47 | jekyll-paginate (1.1.0) 48 | jekyll-redirect-from (0.16.0) 49 | jekyll (>= 3.3, < 5.0) 50 | jekyll-sass-converter (2.1.0) 51 | sassc (> 2.0.1, < 3.0) 52 | jekyll-seo-tag (2.7.1) 53 | jekyll (>= 3.8, < 5.0) 54 | jekyll-sitemap (1.4.0) 55 | jekyll (>= 3.7, < 5.0) 56 | jekyll-watch (2.2.1) 57 | listen (~> 3.0) 58 | json (2.5.1) 59 | json-minify (0.0.3) 60 | json (> 0) 61 | kramdown (2.3.1) 62 | rexml 63 | kramdown-parser-gfm (1.1.0) 64 | kramdown (~> 2.0) 65 | liquid (4.0.4) 66 | listen (3.5.1) 67 | rb-fsevent (~> 0.10, >= 0.10.3) 68 | rb-inotify (~> 0.9, >= 0.9.10) 69 | mercenary (0.4.0) 70 | pathutil (0.16.2) 71 | forwardable-extended (~> 2.6) 72 | public_suffix (4.0.6) 73 | rb-fsevent (0.10.4) 74 | rb-inotify (0.10.1) 75 | ffi (~> 1.0) 76 | rexml (3.2.5) 77 | rouge (3.26.0) 78 | safe_yaml (1.0.5) 79 | sassc (2.4.0) 80 | ffi (~> 1.9) 81 | sassc (2.4.0-x64-mingw32) 82 | ffi (~> 1.9) 83 | terminal-table (1.8.0) 84 | unicode-display_width (~> 1.1, >= 1.1.1) 85 | thread_safe (0.3.6) 86 | tzinfo (1.2.10) 87 | thread_safe (~> 0.1) 88 | tzinfo-data (1.2021.1) 89 | tzinfo (>= 1.0.0) 90 | uglifier (4.2.0) 91 | execjs (>= 0.3.0, < 3) 92 | unicode-display_width (1.7.0) 93 | webrick (1.7.0) 94 | 95 | PLATFORMS 96 | ruby 97 | x64-mingw32 98 | 99 | DEPENDENCIES 100 | jekyll (~> 4.1.1) 101 | jekyll-archives 102 | jekyll-feed 103 | jekyll-minifier 104 | jekyll-paginate 105 | jekyll-redirect-from 106 | jekyll-seo-tag 107 | jekyll-sitemap 108 | tzinfo (~> 1.2) 109 | tzinfo-data 110 | webrick (~> 1.7) 111 | 112 | BUNDLED WITH 113 | 2.2.9 114 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Building GetNighthawk project site 2 | 3 | jekyll=bundle exec jekyll 4 | 5 | site: 6 | $(jekyll) serve --drafts --livereload --config _config.yml 7 | 8 | docker: 9 | docker run --name getnighthawk --rm -p 4000:4000 -v `pwd`:"/srv/jekyll" jekyll/jekyll:4.0.0 bash -c "bundle install; jekyll serve --drafts --livereload --config _config.yml" -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | title: Nighthawk 2 | author: Layer5 Authors 3 | email: community@layer5.io 4 | name: Layer5 5 | description: "The Nighthawk distribution for service mesh performance characterization. Integrating Meshery and Service Mesh Performance." 6 | url: "https://getnighthawk.dev" 7 | #baseurl: /docs 8 | 9 | #Contact / Social 10 | github: https://github.com/layer5io/getnighthawk 11 | slack: http://slack.layer5.io/ 12 | blog: https://layer5.io/blog 13 | docker: https://hub.docker.com/u/layer5/ 14 | youtube: https://www.youtube.com/channel/UCFL1af7_wdnhHXL1InzaMvA?sub_confirmation=1 15 | twitter: 16 | card: summary 17 | username: layer5 18 | url: "https://twitter.com/layer5" 19 | image: "https://layer5.io/assets/images/layer5/5-dark-bg.png" 20 | 21 | # Google tracking, if both are filled, tag manager will prevail. Set up GA through GTM in that case 22 | tag_manager_id: # This looks something like GTM-XXXXXXX 23 | google_analytics_tracking_id: UA-2969471-4 # This looks something like UA-000000000-0 Head over to https://analytics.google.com/ to setup. 24 | 25 | timezone: Etc/UTC 26 | 27 | # Build settings 28 | # theme: minima 29 | # paginate: 5 30 | # markdown: kramdown 31 | permalink: pretty 32 | sass: 33 | sass_dir: _sass 34 | # style: compact 35 | 36 | # This logic is included based on differences of the handling of trailing slashes between Jekyll and GitHub Pages 37 | # permalinks: 38 | # - docs: "/docs" 39 | 40 | collections_dir: collections 41 | collections: 42 | pages: 43 | output: true 44 | docs: 45 | output: true 46 | 47 | 48 | 49 | 50 | # defaults: 51 | # - scope: 52 | # path: "" 53 | #values: 54 | # image: /assets/images/layer5/layer5-tag-linkedin.png 55 | # - scope: 56 | # type: pages 57 | # path: "" 58 | 59 | defaults: 60 | - 61 | scope: 62 | path: "" 63 | type: "pages" 64 | values: 65 | layout: "plain" 66 | image: 67 | path: /assets/images/logos/nighthawk/icon/nighthawk-logo.png 68 | - 69 | scope: 70 | path: "" 71 | type: "posts" 72 | values: 73 | layout: "post" 74 | _options: 75 | content: 76 | width: 1500 77 | height: 2500 78 | - 79 | scope: 80 | path: "" 81 | type: "docs/overview" 82 | values: 83 | layout: "doc" 84 | permalink: /docs/:section/:title 85 | _options: 86 | content: 87 | width: 1500 88 | height: 2500 89 | - 90 | scope: 91 | path: "docs/architecture" 92 | type: "docs" 93 | values: 94 | layout: "doc" 95 | permalink: /docs/:section/:title 96 | # category: architecture 97 | _options: 98 | content: 99 | width: 1500 100 | height: 2500 101 | - 102 | scope: 103 | path: "" 104 | values: 105 | layout: "page" 106 | - 107 | scope: 108 | path: "programs.html" 109 | values: 110 | layout: "default" 111 | - 112 | scope: 113 | path: "index.html" 114 | values: 115 | layout: "default" 116 | - 117 | scope: 118 | path: "contact.html" 119 | values: 120 | full_width: true 121 | 122 | jekyll-archives: 123 | enabled: 124 | - categories 125 | 126 | plugins: 127 | - jekyll-archives 128 | - jekyll-sitemap 129 | - jekyll-seo-tag 130 | - jekyll-feed 131 | - jekyll-paginate 132 | 133 | exclude: 134 | - Gemfile 135 | - Gemfile.lock 136 | - README.md 137 | - LICENSE 138 | 139 | social_icons: 140 | - Facebook 141 | - Google Plus 142 | - Instagram 143 | - LinkedIn 144 | - Pinterest 145 | - Tumblr 146 | - Twitter 147 | - YouTube 148 | - RSS 149 | 150 | # Colors 151 | getnighthawk: 152 | charcoal: "#3c494f" 153 | caribbeangreen: "#00b39f" 154 | keppel: "#00d3a9" 155 | saffron: "#EBC017" 156 | dark-jungle-green: "#1E2117" 157 | gray: "#a0aaaa" 158 | 159 | 160 | ## Reference - OSS this site uses: 161 | 162 | -------------------------------------------------------------------------------- /docs/_data/docs.yml: -------------------------------------------------------------------------------- 1 | - name: Overview 2 | number: One 3 | - name: Getting Started 4 | number: Two 5 | - name: Performance Benchmarking 6 | number: Three -------------------------------------------------------------------------------- /docs/_data/footer-social.yml: -------------------------------------------------------------------------------- 1 | - title: Social 2 | links: 3 | - name: Twitter 4 | link: https://twitter.com/layer5 5 | social_icon: Twitter 6 | new_window: true 7 | - name: Calendar 8 | link: https://layer5.io/community/calendar 9 | social_icon: Calendar 10 | new_window: true 11 | - name: YouTube 12 | link: https://www.youtube.com/channel/UCFL1af7_wdnhHXL1InzaMvA 13 | social_icon: YouTube 14 | new_window: true 15 | - name: Docker Hub 16 | link: https://hub.docker.com/u/layer5/ 17 | social_icon: DockerHub 18 | new_window: true 19 | - name: Slack 20 | link: http://slack.layer5.io/ 21 | social_icon: Slack 22 | new_window: true 23 | - name: GitHub 24 | link: https://github.com/layer5io/getnighthawk/ 25 | social_icon: GitHub 26 | new_window: true 27 | -------------------------------------------------------------------------------- /docs/_data/footer.yml: -------------------------------------------------------------------------------- 1 | - title: Getting Started 2 | links: 3 | - name: Features 4 | link: /features 5 | - name: Run Nighthawk 6 | link: /docs/what-is-nighthawk 7 | new_window: false 8 | - name: Docs 9 | link: /docs 10 | new_window: false 11 | 12 | - title2: Resources 13 | links2: 14 | - name: Service Mesh Performance 15 | link: https://smp-spec.io 16 | new_window: true 17 | - name: Service Mesh Landscape 18 | link: https://layer5.io/landscape 19 | new_window: true -------------------------------------------------------------------------------- /docs/_data/navigation.yml: -------------------------------------------------------------------------------- 1 | 2 | - name: Home 3 | link: / 4 | new_window: false 5 | highlight: false 6 | - name: About 7 | link: /about 8 | new_window: false 9 | highlight: false 10 | 11 | - name: Docs 12 | link: /docs 13 | new_window: false 14 | highlight: false 15 | - name: Community 16 | link: https://layer5.io/community 17 | new_window: false 18 | highlight: false 19 | - name: GitHub 20 | link: https://github.com/layer5io/getnighthawk 21 | new_window: false 22 | highlight: false 23 | -------------------------------------------------------------------------------- /docs/_includes/analytics.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /docs/_includes/docs-title.html: -------------------------------------------------------------------------------- 1 |2 | {% for category in include.docs.categories %} 3 | 4 | {{ category | capitalize }} 5 | 6 | {% endfor %} 7 | {{ include.docs.date | date: "%B %d, %Y" }} 8 |
9 | -------------------------------------------------------------------------------- /docs/_includes/explain.html: -------------------------------------------------------------------------------- 1 |5 | Compatibility with the Service Mesh Performance (SMP) specification so that you can achieve consistency in your own performance management efforts and participate in the broader exchange of analysis and best practices of optimal operation of distributed systems, particularly in a Kubernetes environment and for workloads running on a service mesh. 6 |
7 | 8 |