55 |
56 | {!open && (
57 |
58 |
59 |
60 | )}
61 |
62 |
63 |
64 |
71 |
75 |
76 | }
77 | sx={{ mr: 1, fontWeight: 'fontWeightBold' }}
78 | />
79 |
82 |
83 |
84 |
85 |
86 | );
87 | }
88 |
--------------------------------------------------------------------------------
/.github/workflows/prepare-matrix.yml:
--------------------------------------------------------------------------------
1 | name: Prepare Matrix
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | matrix_filename:
7 | description: 'Matrix of jobs and their respective environments'
8 | required: false
9 | default: 'quic_matrix.json'
10 | type: string
11 | workflowId:
12 | description: 'The ID of the caller workflow'
13 | required: false
14 | default: 'manual'
15 | type: string
16 |
17 | workflow_call:
18 | inputs:
19 | matrix_filename:
20 | description: "Matrix of jobs and their respective environments"
21 | required: false
22 | default: 'quic_matrix.json'
23 | type: string
24 | workflowId:
25 | description: "The ID of the caller workflow"
26 | required: true
27 | type: string
28 | outputs:
29 | lab-matrix:
30 | description: "The STATIC lab jobs to be run"
31 | value: ${{ jobs.prepare-matrix.outputs.lab-matrix }}
32 | lab-stateless-matrix:
33 | description: "The ephemeral lab jobs to be run"
34 | value: ${{ jobs.prepare-matrix.outputs.lab-stateless-matrix }}
35 | azure-matrix:
36 | description: "The list of jobs to be run on Azure VMs"
37 | value: ${{ jobs.prepare-matrix.outputs.azure-matrix }}
38 | full-matrix:
39 | description: "The full list of jobs to be run in secnetperf"
40 | value: ${{ jobs.prepare-matrix.outputs.full-matrix }}
41 |
42 |
43 | permissions: write-all
44 |
45 | jobs:
46 | prepare-matrix:
47 | name: Preparing the lab and 1es azure matrix.
48 | outputs:
49 | lab-matrix: ${{ steps.generate-lab-matrix.outputs.matrix }}
50 | azure-matrix: ${{ steps.generate-azure-matrix.outputs.matrix }}
51 | full-matrix: ${{ steps.generate-full-matrix.outputs.matrix }}
52 | lab-stateless-matrix: ${{ steps.generate-lab-stateless-matrix.outputs.matrix }}
53 | runs-on: windows-latest
54 | steps:
55 | - name: Checkout
56 | uses: actions/checkout@v2
57 | - name: Run Prepare Matrix
58 | run: ./.github/workflows/prepare-matrix.ps1
59 | - id: generate-lab-matrix
60 | run: echo "matrix=$(jq -c '.' ./.github/workflows/lab-matrix.json)" >> $GITHUB_OUTPUT
61 | shell: bash
62 | - id: generate-lab-stateless-matrix
63 | run: echo "matrix=$(jq -c '.' ./.github/workflows/lab-stateless-matrix.json)" >> $GITHUB_OUTPUT
64 | shell: bash
65 | - id: generate-azure-matrix
66 | run: echo "matrix=$(jq -c '.' ./.github/workflows/azure-matrix.json)" >> $GITHUB_OUTPUT
67 | shell: bash
68 | - id: generate-full-matrix
69 | run: echo "matrix=$(jq -c '.' ./.github/workflows/full-matrix.json)" >> $GITHUB_OUTPUT
70 | shell: bash
71 |
--------------------------------------------------------------------------------
/.github/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Network Perfomance Testing
2 |
3 | The repo is the common place other Microsoft owned open source networking projects use to run, store and visualize networking performance testing. Currently, the following projects (will) use this:
4 |
5 | - [microsoft/msquic](https://github.com/microsoft/msquic) -- [Dashboard](https://microsoft.github.io/netperf/dist) (actively running per PR on Netperf)
6 | - [microsoft/xdp-for-Windows](https://github.com/microsoft/xdp-for-windows) -- (not supported yet)
7 | - [microsoft/ebpf-for-Windows](https://github.com/microsoft/ebpf-for-windows) -- [Dashboard](https://bpfperformancegrafana.azurewebsites.net/public-dashboards/3826972d0ff245158b6df21d5e6868a9?orgId=1) (running on a schedule)
8 |
9 | ## Goal
10 |
11 | Historically, networking performance testing has been spotty, inconsistent, not reproducable, and not easily accessible. Different groups or projects test performance in different ways, on different hardware. They even have different definitions of things like throughput and latency. This repo aims to fix that by providing a common, open place to run, store, and visualize networking performance testing. The end result is ultimately a set of dashboards summarizing the performance of the various projects, across various scenarios, and across various platforms.
12 |
13 | ## Documentation
14 |
15 | - [Start Here](./docs/start_here.md)
16 |
17 | ## Contributing
18 |
19 | This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
20 |
21 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
22 |
23 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
24 |
25 | ## Trademarks
26 |
27 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.
28 |
--------------------------------------------------------------------------------
/dashboard/src/theme/palette.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | // SETUP COLORS
6 |
7 | export const grey = {
8 | 0: '#FFFFFF',
9 | 100: '#F9FAFB',
10 | 200: '#F4F6F8',
11 | 300: '#DFE3E8',
12 | 400: '#C4CDD5',
13 | 500: '#919EAB',
14 | 600: '#637381',
15 | 700: '#454F5B',
16 | 800: '#212B36',
17 | 900: '#161C24',
18 | };
19 |
20 | export const primary = {
21 | lighter: '#D0ECFE',
22 | light: '#73BAFB',
23 | main: '#1877F2',
24 | dark: '#0C44AE',
25 | darker: '#042174',
26 | contrastText: '#FFFFFF',
27 | };
28 |
29 | export const secondary = {
30 | lighter: '#EFD6FF',
31 | light: '#C684FF',
32 | main: '#8E33FF',
33 | dark: '#5119B7',
34 | darker: '#27097A',
35 | contrastText: '#FFFFFF',
36 | };
37 |
38 | export const info = {
39 | lighter: '#CAFDF5',
40 | light: '#61F3F3',
41 | main: '#00B8D9',
42 | dark: '#006C9C',
43 | darker: '#003768',
44 | contrastText: '#FFFFFF',
45 | };
46 |
47 | export const success = {
48 | lighter: '#C8FAD6',
49 | light: '#5BE49B',
50 | main: '#00A76F',
51 | dark: '#007867',
52 | darker: '#004B50',
53 | contrastText: '#FFFFFF',
54 | };
55 |
56 | export const warning = {
57 | lighter: '#FFF5CC',
58 | light: '#FFD666',
59 | main: '#FFAB00',
60 | dark: '#B76E00',
61 | darker: '#7A4100',
62 | contrastText: grey[800],
63 | };
64 |
65 | export const error = {
66 | lighter: '#FFE9D5',
67 | light: '#FFAC82',
68 | main: '#FF5630',
69 | dark: '#B71D18',
70 | darker: '#7A0916',
71 | contrastText: '#FFFFFF',
72 | };
73 |
74 | export const common = {
75 | black: '#000000',
76 | white: '#FFFFFF',
77 | };
78 |
79 | export const action = {
80 | hover: alpha(grey[500], 0.08),
81 | selected: alpha(grey[500], 0.16),
82 | disabled: alpha(grey[500], 0.8),
83 | disabledBackground: alpha(grey[500], 0.24),
84 | focus: alpha(grey[500], 0.24),
85 | hoverOpacity: 0.08,
86 | disabledOpacity: 0.48,
87 | };
88 |
89 | const base = {
90 | primary,
91 | secondary,
92 | info,
93 | success,
94 | warning,
95 | error,
96 | grey,
97 | common,
98 | divider: alpha(grey[500], 0.2),
99 | action,
100 | };
101 |
102 | // ----------------------------------------------------------------------
103 |
104 | export function palette() {
105 | return {
106 | ...base,
107 | mode: 'light',
108 | text: {
109 | primary: grey[800],
110 | secondary: grey[600],
111 | disabled: grey[500],
112 | },
113 | background: {
114 | paper: '#FFFFFF',
115 | default: grey[100],
116 | neutral: grey[200],
117 | },
118 | action: {
119 | ...base.action,
120 | active: grey[600],
121 | },
122 | };
123 | }
124 |
--------------------------------------------------------------------------------
/dashboard/src/theme/typography.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function remToPx(value) {
4 | return Math.round(parseFloat(value) * 16);
5 | }
6 |
7 | export function pxToRem(value) {
8 | return `${value / 16}rem`;
9 | }
10 |
11 | export function responsiveFontSizes({ sm, md, lg }) {
12 | return {
13 | '@media (min-width:600px)': {
14 | fontSize: pxToRem(sm),
15 | },
16 | '@media (min-width:900px)': {
17 | fontSize: pxToRem(md),
18 | },
19 | '@media (min-width:1200px)': {
20 | fontSize: pxToRem(lg),
21 | },
22 | };
23 | }
24 |
25 | export const primaryFont = 'Public Sans, sans-serif';
26 | export const secondaryFont = 'Barlow, sans-serif';
27 |
28 | // ----------------------------------------------------------------------
29 |
30 | export const typography = {
31 | fontFamily: primaryFont,
32 | fontSecondaryFamily: secondaryFont,
33 | fontWeightRegular: 400,
34 | fontWeightMedium: 500,
35 | fontWeightSemiBold: 600,
36 | fontWeightBold: 700,
37 | h1: {
38 | fontWeight: 800,
39 | lineHeight: 80 / 64,
40 | fontSize: pxToRem(40),
41 | ...responsiveFontSizes({ sm: 52, md: 58, lg: 64 }),
42 | },
43 | h2: {
44 | fontWeight: 800,
45 | lineHeight: 64 / 48,
46 | fontSize: pxToRem(32),
47 | ...responsiveFontSizes({ sm: 40, md: 44, lg: 48 }),
48 | },
49 | h3: {
50 | fontWeight: 700,
51 | lineHeight: 1.5,
52 | fontSize: pxToRem(24),
53 | ...responsiveFontSizes({ sm: 26, md: 30, lg: 32 }),
54 | },
55 | h4: {
56 | fontWeight: 700,
57 | lineHeight: 1.5,
58 | fontSize: pxToRem(20),
59 | ...responsiveFontSizes({ sm: 20, md: 24, lg: 24 }),
60 | },
61 | h5: {
62 | fontWeight: 700,
63 | lineHeight: 1.5,
64 | fontSize: pxToRem(18),
65 | ...responsiveFontSizes({ sm: 19, md: 20, lg: 20 }),
66 | },
67 | h6: {
68 | fontWeight: 700,
69 | lineHeight: 28 / 18,
70 | fontSize: pxToRem(17),
71 | ...responsiveFontSizes({ sm: 18, md: 18, lg: 18 }),
72 | },
73 | subtitle1: {
74 | fontWeight: 600,
75 | lineHeight: 1.5,
76 | fontSize: pxToRem(16),
77 | },
78 | subtitle2: {
79 | fontWeight: 600,
80 | lineHeight: 22 / 14,
81 | fontSize: pxToRem(14),
82 | },
83 | body1: {
84 | lineHeight: 1.5,
85 | fontSize: pxToRem(16),
86 | },
87 | body2: {
88 | lineHeight: 22 / 14,
89 | fontSize: pxToRem(14),
90 | },
91 | caption: {
92 | lineHeight: 1.5,
93 | fontSize: pxToRem(12),
94 | },
95 | overline: {
96 | fontWeight: 700,
97 | lineHeight: 1.5,
98 | fontSize: pxToRem(12),
99 | textTransform: 'uppercase',
100 | },
101 | button: {
102 | fontWeight: 700,
103 | lineHeight: 24 / 14,
104 | fontSize: pxToRem(14),
105 | textTransform: 'unset',
106 | },
107 | };
108 |
--------------------------------------------------------------------------------
/docs/onboard.md:
--------------------------------------------------------------------------------
1 | ## Onboarding your project
2 |
3 | Create the performance testing workflow for your project in `.github/workflows/