├── .github
└── workflows
│ ├── build.yml
│ ├── release.yml
│ ├── template
│ ├── setup-go-template.yaml
│ ├── setup-protobuf-template.yaml
│ └── setup-ts-template.yaml
│ ├── test-go.yml
│ ├── test-ts.yml
│ └── testing.yml
├── .gitignore
├── Makefile
├── README.md
├── api
├── api.pb.go
└── api_grpc.pb.go
├── assets
├── mock-data
│ ├── allocs
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.009.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.010.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.011.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.012.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.014.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.015.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.016.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.017.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.018.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.019.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.020.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.021.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.022.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.023.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.024.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.025.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.026.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.027.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.028.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.029.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.030.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.031.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.032.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.033.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.034.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.035.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.036.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.037.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.038.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.039.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.040.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.041.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.042.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.043.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.044.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.045.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.046.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.047.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.048.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.049.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.050.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.051.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.052.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.053.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.054.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.055.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.056.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.057.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.058.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.059.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.060.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.061.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.062.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.063.pb.gz
│ │ └── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.064.pb.gz
│ ├── cpu
│ │ ├── pprof.etcd.samples.cpu.001.pb.gz
│ │ ├── pprof.etcd.samples.cpu.002.pb.gz
│ │ ├── pprof.etcd.samples.cpu.003.pb.gz
│ │ ├── pprof.etcd.samples.cpu.004.pb.gz
│ │ ├── pprof.etcd.samples.cpu.005.pb.gz
│ │ ├── pprof.etcd.samples.cpu.006.pb.gz
│ │ ├── pprof.etcd.samples.cpu.007.pb.gz
│ │ ├── pprof.etcd.samples.cpu.008.pb.gz
│ │ ├── pprof.etcd.samples.cpu.009.pb.gz
│ │ ├── pprof.etcd.samples.cpu.010.pb.gz
│ │ ├── pprof.etcd.samples.cpu.011.pb.gz
│ │ ├── pprof.etcd.samples.cpu.012.pb.gz
│ │ ├── pprof.etcd.samples.cpu.013.pb.gz
│ │ ├── pprof.etcd.samples.cpu.014.pb.gz
│ │ ├── pprof.etcd.samples.cpu.015.pb.gz
│ │ ├── pprof.etcd.samples.cpu.016.pb.gz
│ │ ├── pprof.etcd.samples.cpu.017.pb.gz
│ │ ├── pprof.etcd.samples.cpu.018.pb.gz
│ │ ├── pprof.etcd.samples.cpu.019.pb.gz
│ │ ├── pprof.etcd.samples.cpu.020.pb.gz
│ │ ├── pprof.etcd.samples.cpu.021.pb.gz
│ │ ├── pprof.etcd.samples.cpu.022.pb.gz
│ │ ├── pprof.etcd.samples.cpu.023.pb.gz
│ │ ├── pprof.etcd.samples.cpu.024.pb.gz
│ │ ├── pprof.etcd.samples.cpu.025.pb.gz
│ │ ├── pprof.etcd.samples.cpu.026.pb.gz
│ │ ├── pprof.etcd.samples.cpu.027.pb.gz
│ │ ├── pprof.etcd.samples.cpu.028.pb.gz
│ │ ├── pprof.etcd.samples.cpu.029.pb.gz
│ │ ├── pprof.etcd.samples.cpu.030.pb.gz
│ │ ├── pprof.etcd.samples.cpu.031.pb.gz
│ │ ├── pprof.etcd.samples.cpu.032.pb.gz
│ │ ├── pprof.etcd.samples.cpu.033.pb.gz
│ │ ├── pprof.etcd.samples.cpu.034.pb.gz
│ │ ├── pprof.etcd.samples.cpu.035.pb.gz
│ │ ├── pprof.etcd.samples.cpu.036.pb.gz
│ │ ├── pprof.etcd.samples.cpu.037.pb.gz
│ │ ├── pprof.etcd.samples.cpu.038.pb.gz
│ │ ├── pprof.etcd.samples.cpu.039.pb.gz
│ │ ├── pprof.etcd.samples.cpu.040.pb.gz
│ │ ├── pprof.etcd.samples.cpu.041.pb.gz
│ │ ├── pprof.etcd.samples.cpu.042.pb.gz
│ │ ├── pprof.etcd.samples.cpu.043.pb.gz
│ │ ├── pprof.etcd.samples.cpu.044.pb.gz
│ │ ├── pprof.etcd.samples.cpu.045.pb.gz
│ │ ├── pprof.etcd.samples.cpu.046.pb.gz
│ │ ├── pprof.etcd.samples.cpu.047.pb.gz
│ │ ├── pprof.etcd.samples.cpu.048.pb.gz
│ │ ├── pprof.etcd.samples.cpu.049.pb.gz
│ │ ├── pprof.etcd.samples.cpu.050.pb.gz
│ │ ├── pprof.etcd.samples.cpu.051.pb.gz
│ │ ├── pprof.etcd.samples.cpu.052.pb.gz
│ │ ├── pprof.etcd.samples.cpu.053.pb.gz
│ │ ├── pprof.etcd.samples.cpu.054.pb.gz
│ │ ├── pprof.etcd.samples.cpu.055.pb.gz
│ │ ├── pprof.etcd.samples.cpu.056.pb.gz
│ │ ├── pprof.etcd.samples.cpu.057.pb.gz
│ │ ├── pprof.etcd.samples.cpu.058.pb.gz
│ │ ├── pprof.etcd.samples.cpu.059.pb.gz
│ │ ├── pprof.etcd.samples.cpu.060.pb.gz
│ │ ├── pprof.etcd.samples.cpu.061.pb.gz
│ │ ├── pprof.etcd.samples.cpu.062.pb.gz
│ │ ├── pprof.etcd.samples.cpu.063.pb.gz
│ │ └── pprof.etcd.samples.cpu.064.pb.gz
│ ├── goroutine
│ │ ├── pprof.etcd.goroutine.001.pb.gz
│ │ ├── pprof.etcd.goroutine.002.pb.gz
│ │ ├── pprof.etcd.goroutine.003.pb.gz
│ │ ├── pprof.etcd.goroutine.004.pb.gz
│ │ ├── pprof.etcd.goroutine.005.pb.gz
│ │ ├── pprof.etcd.goroutine.006.pb.gz
│ │ ├── pprof.etcd.goroutine.007.pb.gz
│ │ ├── pprof.etcd.goroutine.008.pb.gz
│ │ ├── pprof.etcd.goroutine.009.pb.gz
│ │ ├── pprof.etcd.goroutine.010.pb.gz
│ │ ├── pprof.etcd.goroutine.011.pb.gz
│ │ ├── pprof.etcd.goroutine.012.pb.gz
│ │ ├── pprof.etcd.goroutine.013.pb.gz
│ │ ├── pprof.etcd.goroutine.014.pb.gz
│ │ ├── pprof.etcd.goroutine.015.pb.gz
│ │ ├── pprof.etcd.goroutine.016.pb.gz
│ │ ├── pprof.etcd.goroutine.017.pb.gz
│ │ ├── pprof.etcd.goroutine.018.pb.gz
│ │ ├── pprof.etcd.goroutine.019.pb.gz
│ │ ├── pprof.etcd.goroutine.020.pb.gz
│ │ ├── pprof.etcd.goroutine.021.pb.gz
│ │ ├── pprof.etcd.goroutine.022.pb.gz
│ │ ├── pprof.etcd.goroutine.023.pb.gz
│ │ ├── pprof.etcd.goroutine.024.pb.gz
│ │ ├── pprof.etcd.goroutine.025.pb.gz
│ │ ├── pprof.etcd.goroutine.026.pb.gz
│ │ ├── pprof.etcd.goroutine.027.pb.gz
│ │ ├── pprof.etcd.goroutine.028.pb.gz
│ │ ├── pprof.etcd.goroutine.029.pb.gz
│ │ ├── pprof.etcd.goroutine.030.pb.gz
│ │ ├── pprof.etcd.goroutine.031.pb.gz
│ │ ├── pprof.etcd.goroutine.032.pb.gz
│ │ ├── pprof.etcd.goroutine.033.pb.gz
│ │ ├── pprof.etcd.goroutine.034.pb.gz
│ │ ├── pprof.etcd.goroutine.035.pb.gz
│ │ ├── pprof.etcd.goroutine.036.pb.gz
│ │ ├── pprof.etcd.goroutine.037.pb.gz
│ │ ├── pprof.etcd.goroutine.038.pb.gz
│ │ ├── pprof.etcd.goroutine.039.pb.gz
│ │ ├── pprof.etcd.goroutine.040.pb.gz
│ │ ├── pprof.etcd.goroutine.041.pb.gz
│ │ ├── pprof.etcd.goroutine.042.pb.gz
│ │ ├── pprof.etcd.goroutine.043.pb.gz
│ │ ├── pprof.etcd.goroutine.044.pb.gz
│ │ ├── pprof.etcd.goroutine.045.pb.gz
│ │ ├── pprof.etcd.goroutine.046.pb.gz
│ │ ├── pprof.etcd.goroutine.047.pb.gz
│ │ ├── pprof.etcd.goroutine.048.pb.gz
│ │ ├── pprof.etcd.goroutine.049.pb.gz
│ │ ├── pprof.etcd.goroutine.050.pb.gz
│ │ ├── pprof.etcd.goroutine.051.pb.gz
│ │ ├── pprof.etcd.goroutine.052.pb.gz
│ │ ├── pprof.etcd.goroutine.053.pb.gz
│ │ ├── pprof.etcd.goroutine.054.pb.gz
│ │ ├── pprof.etcd.goroutine.055.pb.gz
│ │ ├── pprof.etcd.goroutine.056.pb.gz
│ │ ├── pprof.etcd.goroutine.057.pb.gz
│ │ ├── pprof.etcd.goroutine.058.pb.gz
│ │ ├── pprof.etcd.goroutine.059.pb.gz
│ │ ├── pprof.etcd.goroutine.060.pb.gz
│ │ ├── pprof.etcd.goroutine.061.pb.gz
│ │ └── pprof.etcd.goroutine.062.pb.gz
│ ├── heap
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.009.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.010.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.011.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.012.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.014.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.015.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.016.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.017.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.018.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.019.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.020.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.021.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.022.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.023.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.024.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.025.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.026.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.027.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.028.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.029.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.030.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.031.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.032.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.033.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.034.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.035.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.036.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.037.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.038.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.039.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.040.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.041.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.042.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.043.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.044.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.045.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.046.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.047.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.048.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.049.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.050.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.051.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.052.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.053.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.054.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.055.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.056.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.057.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.058.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.059.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.060.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.061.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.062.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.063.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.064.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.065.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.066.pb.gz
│ │ ├── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.067.pb.gz
│ │ └── pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.068.pb.gz
│ └── how-to-generate-mock-data.sh
├── mock_data.go
├── web.go
├── web
│ ├── dummy
│ └── html.zip
└── web_test.go
├── cmd
└── live-pprof
│ └── live-pprof.go
├── generate.go
├── go.mk
├── go.mod
├── go.sum
├── internal
├── chi
│ ├── chi_web_server.go
│ ├── chi_web_server_test.go
│ └── middleware.go
├── config
│ └── live-pprof-config.go
├── echo
│ ├── echo_web_server.go
│ └── middleware.go
├── general
│ └── general_server.go
├── live-pprof.go
├── logging
│ └── logging.go
├── metrics
│ ├── metrics_server.go
│ ├── metrics_type.go
│ ├── mock_assets.go
│ ├── mock_metrics_server.go
│ └── mock_metrics_server_prod.go
├── rpc.go
└── util
│ └── util.go
├── main.go
├── pkg
├── test_data
│ └── html.zip
├── zip.go
└── zip_test.go
├── proto
└── api.proto
├── tests
├── e2e
│ └── run_binary_test.go
└── framework
│ ├── util.go
│ └── util_test.go
└── ts
├── .env.development
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .npmrc
├── LICENSE
├── Makefile
├── README.md
├── app
├── about
│ ├── layout.tsx
│ └── page.tsx
├── blog
│ ├── layout.tsx
│ └── page.tsx
├── docs
│ ├── layout.tsx
│ └── page.tsx
├── error.tsx
├── layout.tsx
├── page.tsx
├── pricing
│ ├── layout.tsx
│ └── page.tsx
└── providers.tsx
├── components
├── about-modal.tsx
├── all-graphs.tsx
├── chart-option.tsx
├── charts
│ ├── basic-graph.tsx
│ ├── dark-theme.js
│ ├── data-operation.ts
│ ├── data-structure.ts
│ └── pprof-chart.tsx
├── client
│ └── metrics.ts
├── home-menu.tsx
├── hooks
│ ├── __test__
│ │ └── set-url.test.tsx
│ ├── use-basic-option.tsx
│ ├── use-graph-data.tsx
│ ├── use-graph-pref-snap.tsx
│ ├── use-is-dev.tsx
│ ├── use-param-action.tsx
│ ├── use-pprof-option.tsx
│ ├── use-profile-duration.tsx
│ └── use-url.tsx
├── icons.tsx
├── mock-switch.tsx
├── navbar.tsx
├── primitives.ts
├── recorder-button.tsx
├── recorder-time.tsx
├── retained-samples.tsx
├── sample-interval.tsx
├── smooth-switch.tsx
├── state
│ ├── emitter.ts
│ ├── pref-state.ts
│ ├── recorder-state.ts
│ └── ui-state.ts
├── theme-switch.tsx
├── url-bar.tsx
├── url-detect.tsx
├── url-popover.tsx
├── util
│ ├── prettyTime.js
│ └── util.ts
└── window-listener.tsx
├── config
├── fonts.ts
└── site.ts
├── next.config.js
├── package.json
├── postcss.config.js
├── prettier.config.js
├── public
├── favicon.ico
├── next.svg
└── vercel.svg
├── styles
└── globals.css
├── tailwind.config.js
├── tsconfig.json
├── types
└── index.ts
└── vitest.config.mts
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build binary
2 |
3 | on:
4 | # push:
5 | # branches: [ "main" ]
6 | # paths:
7 | # - '**'
8 | # - '!README.md'
9 | # pull_request:
10 | # branches: [ "main" ]
11 | # paths:
12 | # - '**'
13 | # - '!README.md'
14 | workflow_dispatch:
15 |
16 | jobs:
17 | build_binary:
18 | name: Build binary
19 | runs-on: ubuntu-latest
20 | steps:
21 | - name: Checkout
22 | uses: actions/checkout@v4
23 |
24 | - uses: pnpm/action-setup@v4
25 | name: Install pnpm
26 | with:
27 | version: 9
28 | run_install: false
29 |
30 | - name: Install Node.js
31 | uses: actions/setup-node@v4
32 | with:
33 | node-version: 22
34 | cache: 'pnpm'
35 | cache-dependency-path: 'ts/package.json'
36 |
37 | - name: Install ts dependencies
38 | run: cd ts && pnpm install
39 |
40 | - uses: actions/setup-go@v5
41 | with:
42 | go-version: '^1.23'
43 | cache-dependency-path: "go.sum"
44 |
45 | - name: Install Protoc
46 | uses: arduino/setup-protoc@v3
47 |
48 | - name: Build binary
49 | run: make
50 |
51 | - name: Upload
52 | uses: actions/upload-artifact@v4
53 | with:
54 | name: live-pprof
55 | path: build/live-pprof
56 | compression-level: 9
57 | retention-days: 10
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | release:
5 | types: [ published ]
6 | workflow_dispatch:
7 |
8 | permissions:
9 | contents: write
10 |
11 | jobs:
12 | testing:
13 | uses: ./.github/workflows/testing.yml
14 |
15 | release:
16 | needs: [ testing ]
17 | name: Release
18 | runs-on: ubuntu-latest
19 | steps:
20 | - name: Checkout
21 | uses: actions/checkout@v4
22 |
23 | - uses: pnpm/action-setup@v4
24 | name: Install pnpm
25 | with:
26 | version: 9
27 | run_install: false
28 |
29 | - name: Install Node.js
30 | uses: actions/setup-node@v4
31 | with:
32 | node-version: 22
33 | cache: 'pnpm'
34 | cache-dependency-path: 'ts/package.json'
35 |
36 | - name: Install ts dependencies
37 | run: cd ts && pnpm install
38 |
39 | - uses: actions/setup-go@v5
40 | with:
41 | go-version: '^1.23'
42 | cache-dependency-path: "go.sum"
43 |
44 | - name: Install Protoc
45 | uses: arduino/setup-protoc@v3
46 |
47 | - name: Build binary
48 | run: make release
49 |
50 | - name: ls ./build
51 | run: ls ./build
52 |
53 | - name: Upload the artifacts
54 | uses: skx/github-action-publish-binaries@release-2.0
55 | env:
56 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57 | with:
58 | args: 'build/*.tar.gz build/*.zip'
59 |
--------------------------------------------------------------------------------
/.github/workflows/template/setup-go-template.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | name: Setup go
3 | on: [ workflow_call ]
4 |
5 | jobs:
6 | setup_go:
7 | name: Setup go
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/setup-go@v5
11 | with:
12 | go-version: '^1.23'
13 | - name: Install protoc-gen-go-grpc
14 | run: go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
15 |
16 |
--------------------------------------------------------------------------------
/.github/workflows/template/setup-protobuf-template.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | name: Setup protobuf
3 | on: [ workflow_call ]
4 |
5 | jobs:
6 | setup_protobuf:
7 | name: Setup protobuf
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: arduino/setup-protoc@v3
11 | name: Install Protoc
12 |
--------------------------------------------------------------------------------
/.github/workflows/template/setup-ts-template.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | name: Setup TS
3 | on: [ workflow_call ]
4 |
5 | jobs:
6 | setup_ts:
7 | name: Setup TS
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: pnpm/action-setup@v4
11 | name: Install pnpm
12 | with:
13 | version: 9
14 | run_install: false
15 |
16 | - name: Install Node.js
17 | uses: actions/setup-node@v4
18 | with:
19 | node-version: 22
20 | cache: 'pnpm'
21 |
22 | - name: Install dependencies
23 | run: pnpm install
24 |
25 | - name: Install protoc-gen-js
26 | run: pnpm install -g protoc-gen-js
27 |
--------------------------------------------------------------------------------
/.github/workflows/test-go.yml:
--------------------------------------------------------------------------------
1 | name: Test go
2 |
3 | on:
4 | # push:
5 | # branches: [ "main" ]
6 | # paths:
7 | # - '**'
8 | # - '!ts/**'
9 | # - '!README.md'
10 | # pull_request:
11 | # branches: [ "main" ]
12 | # paths:
13 | # - '**'
14 | # - '!ts/**'
15 | # - '!README.md'
16 | workflow_dispatch:
17 |
18 | jobs:
19 | test_go:
20 | name: Test go
21 | runs-on: ubuntu-latest
22 | steps:
23 | - name: Checkout
24 | uses: actions/checkout@v4
25 |
26 | - uses: actions/setup-go@v5
27 | with:
28 | go-version: '^1.23'
29 | cache-dependency-path: "go.sum"
30 |
31 | - name: Install Protoc
32 | uses: arduino/setup-protoc@v3
33 |
34 | - name: Test
35 | run: make -f go.mk build
36 |
--------------------------------------------------------------------------------
/.github/workflows/test-ts.yml:
--------------------------------------------------------------------------------
1 | name: Test TS
2 |
3 | on:
4 | # push:
5 | # branches: [ "main" ]
6 | # paths:
7 | # - ts/**
8 | # - proto/**
9 | # - .github/**
10 | # pull_request:
11 | # branches: [ "main" ]
12 | # paths:
13 | # - ts/**
14 | # - proto/**
15 | # - .github/**
16 | workflow_dispatch:
17 |
18 | jobs:
19 | test_ts:
20 | name: Test TS
21 | runs-on: ubuntu-latest
22 | steps:
23 | - name: Checkout
24 | uses: actions/checkout@v4
25 |
26 | - uses: pnpm/action-setup@v4
27 | name: Install pnpm
28 | with:
29 | version: 9
30 | run_install: false
31 |
32 | - name: Install Node.js
33 | uses: actions/setup-node@v4
34 | with:
35 | node-version: 22
36 | cache: 'pnpm'
37 | cache-dependency-path: 'ts/package.json'
38 |
39 | - name: Install ts dependencies
40 | run: cd ts && pnpm install
41 |
42 | - name: Install Protoc
43 | uses: arduino/setup-protoc@v3
44 |
45 | - name: Test
46 | run: cd ts && make
47 |
--------------------------------------------------------------------------------
/.github/workflows/testing.yml:
--------------------------------------------------------------------------------
1 | name: Unit testing and E2E testing
2 |
3 | on:
4 | workflow_call:
5 | push:
6 | branches: [ "main" ]
7 | paths:
8 | - '**'
9 | - '!README.md'
10 | pull_request:
11 | branches: [ "main" ]
12 | paths:
13 | - '**'
14 | - '!README.md'
15 | workflow_dispatch:
16 |
17 | jobs:
18 | testing:
19 | name: Unit testing and E2E testing
20 | runs-on: ubuntu-latest
21 | steps:
22 | - name: Checkout
23 | uses: actions/checkout@v4
24 |
25 | - uses: pnpm/action-setup@v4
26 | name: Install pnpm
27 | with:
28 | version: 9
29 | run_install: false
30 |
31 | - name: Install Node.js
32 | uses: actions/setup-node@v4
33 | with:
34 | node-version: 22
35 | cache: 'pnpm'
36 | cache-dependency-path: 'ts/package.json'
37 |
38 | - name: Install ts dependencies
39 | run: cd ts && pnpm install
40 |
41 | - uses: actions/setup-go@v5
42 | with:
43 | go-version: '^1.23'
44 | cache-dependency-path: "go.sum"
45 |
46 | - name: Install Protoc
47 | uses: arduino/setup-protoc@v3
48 |
49 | - name: Unit testing
50 | run: make test
51 |
52 | - name: Upload binary
53 | uses: actions/upload-artifact@v4
54 | with:
55 | name: live-pprof
56 | path: build/live-pprof
57 | compression-level: 9
58 | retention-days: 10
59 |
60 | - name: E2E testing
61 | run: make clean test-e2e
62 |
63 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | **/.idea
2 | **/.vscode
3 | **/.DS_Store
4 |
5 | node_modules
6 | go.work
7 | package.json
8 | pnpm-lock.yaml
9 | live-pprof
10 | assets/web/html/*
11 | build
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | GREEN := \033[32m
2 | YELLOW := \033[33m
3 | RED := \033[31m
4 | RESET := \033[0m
5 |
6 | define print_step
7 | @echo "$(GREEN)===== $(1) =====$(RESET)"
8 | endef
9 |
10 | .PHONY: protoc build release test test-e2e build-for-release
11 |
12 | all: build
13 | $(call print_step, Done)
14 |
15 | release: build-for-release
16 | $(call print_step, Done)
17 |
18 | protoc:
19 | $(call print_step, Generating protobuf files)
20 | $(MAKE) -f go.mk protoc
21 | $(MAKE) -C ts protoc
22 |
23 | build: protoc
24 | $(call print_step, Building)
25 | $(MAKE) -C ts build
26 | $(MAKE) copy
27 | $(MAKE) -f go.mk build
28 |
29 | build-for-release: protoc
30 | $(call print_step, Build for releasing)
31 | $(MAKE) -C ts build
32 | $(MAKE) copy
33 | $(MAKE) zip
34 | $(MAKE) -f go.mk build-for-release
35 |
36 | test: build
37 | $(call print_step, Testing)
38 | $(MAKE) -f go.mk test
39 | $(MAKE) -C ts test
40 |
41 | test-e2e: build
42 | $(call print_step, Testing e2e)
43 | $(MAKE) -f go.mk test-e2e
44 | $(MAKE) clean
45 | $(MAKE) protoc build-for-release
46 | $(call print_step, Testing e2e again)
47 | $(MAKE) -f go.mk test-e2e
48 |
49 | clean:
50 | $(call print_step, Cleaning)
51 | $(MAKE) -f go.mk clean
52 | $(MAKE) -C ts clean
53 | @echo "Removing static files from go"
54 | @if [ -d "./assets/web/html" ]; then \
55 | rm -rf ./assets/web/html; \
56 | fi
57 |
58 | copy:
59 | $(call print_step, Removing static files)
60 | @if [ -d "./assets/web/html" ]; then \
61 | rm -rf ./assets/web/html; \
62 | fi
63 | $(call print_step, Copying static files)
64 | cp -r ts/out assets/web/html
65 |
66 | zip:
67 | $(call print_step, Removing zip)
68 | @if [ -d "rm ./assets/web/html.zip" ]; then \
69 | rm -rf rm ./assets/web/html.zip; \
70 | fi
71 |
72 | $(call print_step, Copying zip)
73 | # this won't work as it creates ts/out entry in the .zip: zip -r assets/web/html.zip ts/out/*
74 | cd ts/out && zip -r ../../assets/web/html.zip ./*
75 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | You don’t want to clutter up your computer with Docker, Prometheus, Grafana or even K8S just to monitor a Go app's heap size, right?
2 |
3 | Use `live-pprof` to Monitor a Go app's performance. It launches in seconds, boosting your local development.
4 |
5 | [](https://github.com/nikolaydubina/go-recipes)
6 |
7 |
8 |
9 | https://github.com/user-attachments/assets/77bfacd8-1779-4aaf-9758-9604362a1eb5
10 |
11 |
Screenshots
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
65 |
66 |
67 | Thanks to [Golang Weekly](https://golangweekly.com/latest) for the shoutout!
68 |
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.009.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.009.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.010.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.010.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.011.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.011.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.012.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.012.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.014.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.014.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.015.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.015.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.016.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.016.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.017.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.017.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.018.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.018.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.019.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.019.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.020.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.020.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.021.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.021.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.022.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.022.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.023.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.023.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.024.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.024.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.025.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.025.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.026.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.026.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.027.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.027.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.028.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.028.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.029.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.029.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.030.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.030.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.031.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.031.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.032.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.032.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.033.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.033.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.034.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.034.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.035.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.035.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.036.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.036.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.037.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.037.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.038.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.038.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.039.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.039.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.040.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.040.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.041.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.041.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.042.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.042.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.043.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.043.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.044.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.044.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.045.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.045.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.046.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.046.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.047.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.047.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.048.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.048.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.049.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.049.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.050.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.050.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.051.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.051.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.052.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.052.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.053.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.053.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.054.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.054.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.055.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.055.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.056.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.056.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.057.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.057.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.058.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.058.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.059.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.059.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.060.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.060.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.061.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.061.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.062.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.062.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.063.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.063.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.064.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/allocs/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.064.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.001.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.001.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.002.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.002.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.003.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.003.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.004.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.004.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.005.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.005.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.006.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.006.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.007.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.007.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.008.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.008.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.009.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.009.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.010.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.010.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.011.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.011.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.012.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.012.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.013.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.013.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.014.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.014.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.015.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.015.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.016.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.016.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.017.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.017.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.018.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.018.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.019.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.019.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.020.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.020.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.021.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.021.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.022.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.022.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.023.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.023.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.024.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.024.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.025.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.025.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.026.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.026.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.027.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.027.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.028.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.028.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.029.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.029.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.030.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.030.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.031.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.031.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.032.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.032.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.033.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.033.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.034.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.034.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.035.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.035.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.036.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.036.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.037.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.037.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.038.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.038.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.039.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.039.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.040.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.040.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.041.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.041.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.042.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.042.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.043.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.043.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.044.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.044.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.045.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.045.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.046.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.046.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.047.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.047.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.048.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.048.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.049.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.049.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.050.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.050.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.051.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.051.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.052.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.052.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.053.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.053.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.054.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.054.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.055.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.055.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.056.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.056.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.057.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.057.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.058.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.058.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.059.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.059.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.060.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.060.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.061.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.061.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.062.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.062.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.063.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.063.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/cpu/pprof.etcd.samples.cpu.064.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/cpu/pprof.etcd.samples.cpu.064.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.001.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.001.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.002.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.002.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.003.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.003.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.004.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.004.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.005.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.005.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.006.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.006.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.007.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.007.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.008.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.008.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.009.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.009.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.010.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.010.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.011.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.011.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.012.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.012.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.013.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.013.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.014.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.014.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.015.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.015.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.016.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.016.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.017.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.017.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.018.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.018.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.019.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.019.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.020.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.020.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.021.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.021.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.022.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.022.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.023.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.023.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.024.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.024.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.025.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.025.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.026.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.026.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.027.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.027.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.028.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.028.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.029.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.029.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.030.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.030.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.031.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.031.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.032.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.032.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.033.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.033.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.034.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.034.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.035.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.035.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.036.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.036.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.037.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.037.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.038.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.038.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.039.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.039.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.040.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.040.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.041.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.041.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.042.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.042.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.043.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.043.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.044.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.044.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.045.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.045.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.046.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.046.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.047.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.047.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.048.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.048.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.049.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.049.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.050.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.050.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.051.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.051.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.052.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.052.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.053.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.053.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.054.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.054.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.055.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.055.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.056.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.056.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.057.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.057.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.058.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.058.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.059.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.059.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.060.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.060.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.061.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.061.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/goroutine/pprof.etcd.goroutine.062.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/goroutine/pprof.etcd.goroutine.062.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.006.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.009.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.009.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.010.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.010.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.011.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.011.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.012.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.012.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.013.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.014.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.014.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.015.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.015.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.016.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.016.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.017.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.017.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.018.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.018.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.019.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.019.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.020.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.020.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.021.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.021.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.022.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.022.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.023.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.023.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.024.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.024.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.025.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.025.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.026.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.026.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.027.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.027.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.028.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.028.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.029.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.029.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.030.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.030.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.031.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.031.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.032.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.032.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.033.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.033.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.034.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.034.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.035.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.035.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.036.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.036.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.037.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.037.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.038.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.038.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.039.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.039.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.040.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.040.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.041.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.041.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.042.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.042.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.043.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.043.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.044.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.044.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.045.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.045.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.046.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.046.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.047.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.047.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.048.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.048.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.049.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.049.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.050.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.050.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.051.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.051.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.052.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.052.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.053.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.053.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.054.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.054.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.055.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.055.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.056.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.056.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.057.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.057.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.058.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.058.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.059.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.059.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.060.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.060.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.061.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.061.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.062.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.062.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.063.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.063.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.064.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.064.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.065.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.065.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.066.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.066.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.067.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.067.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.068.pb.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/mock-data/heap/pprof.etcd.alloc_objects.alloc_space.inuse_objects.inuse_space.068.pb.gz
--------------------------------------------------------------------------------
/assets/mock-data/how-to-generate-mock-data.sh:
--------------------------------------------------------------------------------
1 | rm -rf default.etcd && etcd --enable-pprof
2 |
3 | ./bin/tools/benchmark put --total=190000000 --val-size=10000
4 |
5 | while true ; do go tool pprof -text http://localhost:2379/debug/pprof/profile\?seconds\=1; done
6 |
7 | while true ; do go tool pprof -text http://localhost:2379/debug/pprof/heap && sleep 1 ;done
8 |
9 |
10 | while true ; do go tool pprof -text http://localhost:2379/debug/pprof/allocs && sleep 1 ;done
11 |
12 | while true ; do go tool pprof -text http://localhost:2379/debug/pprof/goroutine && sleep 1 ;done
--------------------------------------------------------------------------------
/assets/mock_data.go:
--------------------------------------------------------------------------------
1 | //go:build !prod
2 |
3 | package assets
4 |
5 | import "embed"
6 |
7 | //go:embed mock-data
8 | var MockData embed.FS
9 |
--------------------------------------------------------------------------------
/assets/web.go:
--------------------------------------------------------------------------------
1 | package assets
2 |
3 | import "embed"
4 |
5 | // Web The all: prefix (added in Go 1.18) ensures that any files or directories prefixed with . or _ are included:
6 | //
7 | //go:embed all:web
8 | var Web embed.FS
9 |
--------------------------------------------------------------------------------
/assets/web/dummy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/web/dummy
--------------------------------------------------------------------------------
/assets/web/html.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/assets/web/html.zip
--------------------------------------------------------------------------------
/assets/web_test.go:
--------------------------------------------------------------------------------
1 | package assets
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | )
8 |
9 | func TestZipContent(t *testing.T) {
10 | z, err := Web.Open("web/html.zip")
11 | defer z.Close()
12 | assert.NoError(t, err)
13 |
14 | stat, err := z.Stat()
15 | assert.NoError(t, err)
16 |
17 | assert.Greater(t, stat.Size(), int64(0))
18 | assert.Equal(t, stat.Name(), "html.zip")
19 | }
20 |
--------------------------------------------------------------------------------
/cmd/live-pprof/live-pprof.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/moderato-app/live-pprof/internal"
5 | )
6 |
7 | func main() {
8 | internal.LivePprof()
9 | }
10 |
--------------------------------------------------------------------------------
/generate.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | //go:generate protoc --go_out=./api --go_opt=paths=source_relative --go-grpc_out=./api --go-grpc_opt=paths=source_relative --proto_path ../proto ../proto/api.proto
4 |
--------------------------------------------------------------------------------
/go.mk:
--------------------------------------------------------------------------------
1 | BINARY_NAME = live-pprof
2 | ENTRY = ./cmd/live-pprof/live-pprof.go
3 |
4 | .PHONY: build
5 |
6 | all: protoc test build
7 | release: protoc test build-for-release
8 |
9 | protoc:
10 | @echo "Generating protobuf files for go"
11 | @if [ ! -d "./api" ]; then \
12 | mkdir ./api; \
13 | fi
14 | go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
15 | go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
16 | protoc --go_out=./api --go_opt=paths=source_relative --go-grpc_out=./api --go-grpc_opt=paths=source_relative --proto_path ./proto ./proto/api.proto
17 |
18 | build:
19 | @echo "Building go"
20 | go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME} ${ENTRY}
21 |
22 | build-for-release:
23 | @echo "Building go for release"
24 | GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME}-linux-amd64 ${ENTRY};
25 | GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME}-linux-arm64 ${ENTRY};
26 | GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME}-darwin-amd64 ${ENTRY};
27 | GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME}-darwin-arm64 ${ENTRY};
28 | GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME}-windows-amd64.exe ${ENTRY};
29 | GOOS=windows GOARCH=arm64 go build -ldflags="-s -w" -tags prod -o build/${BINARY_NAME}-windows-arm64.exe ${ENTRY};
30 | cd build; \
31 | tar -zcvf ${BINARY_NAME}-linux-amd64.tar.gz ${BINARY_NAME}-linux-amd64; \
32 | tar -zcvf ${BINARY_NAME}-linux-arm64.tar.gz ${BINARY_NAME}-linux-arm64; \
33 | tar -zcvf ${BINARY_NAME}-darwin-amd64.tar.gz ${BINARY_NAME}-darwin-amd64; \
34 | tar -zcvf ${BINARY_NAME}-darwin-arm64.tar.gz ${BINARY_NAME}-darwin-arm64; \
35 | zip -r ${BINARY_NAME}-windows-amd64.exe.zip ${BINARY_NAME}-windows-amd64.exe; \
36 | zip -r ${BINARY_NAME}-windows-arm64.exe.zip ${BINARY_NAME}-windows-arm64.exe;
37 |
38 | test:
39 | @echo "Testing go"
40 | go test ./...
41 |
42 | test-e2e:
43 | @echo "Testing go"
44 | go test ./... -tags e2e -timeout 30s
45 |
46 | clean:
47 | @echo "Cleaning go"
48 | go clean; rm -rf build; rm -rf assets/web/html
49 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/moderato-app/live-pprof
2 |
3 | go 1.23.0
4 |
5 | //replace github.com/moderato-app/pprof => ../../google-pprof
6 |
7 | require (
8 | github.com/brpaz/echozap v1.1.3
9 | github.com/go-chi/chi/v5 v5.1.0
10 | github.com/go-cmd/cmd v1.4.3
11 | github.com/improbable-eng/grpc-web v0.15.0
12 | github.com/labstack/echo/v4 v4.12.0
13 | github.com/labstack/gommon v0.4.2
14 | github.com/moderato-app/pprof v0.0.0-20240823224210-78ccd2f4d170
15 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
16 | github.com/psanford/memfs v0.0.0-20230130182539-4dbf7e3e865e
17 | github.com/spf13/pflag v1.0.5
18 | github.com/stretchr/testify v1.9.0
19 | go.uber.org/zap v1.27.0
20 | google.golang.org/grpc v1.65.0
21 | google.golang.org/protobuf v1.34.2
22 | )
23 |
24 | require (
25 | github.com/Eun/go-convert v1.2.12 // indirect
26 | github.com/Eun/go-doppelgangerreader v0.0.0-20220728163552-459d94705224 // indirect
27 | github.com/Eun/go-hit v0.5.23 // indirect
28 | github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect
29 | github.com/cenkalti/backoff/v4 v4.1.1 // indirect
30 | github.com/davecgh/go-spew v1.1.1 // indirect
31 | github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
32 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
33 | github.com/golang/protobuf v1.5.4 // indirect
34 | github.com/google/go-cmp v0.6.0 // indirect
35 | github.com/gookit/color v1.5.4 // indirect
36 | github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca // indirect
37 | github.com/itchyny/gojq v0.12.16 // indirect
38 | github.com/itchyny/timefmt-go v0.1.6 // indirect
39 | github.com/json-iterator/go v1.1.12 // indirect
40 | github.com/k0kubun/pp v3.0.1+incompatible // indirect
41 | github.com/klauspost/compress v1.11.7 // indirect
42 | github.com/lunixbochs/vtclean v1.0.0 // indirect
43 | github.com/mattn/go-colorable v0.1.13 // indirect
44 | github.com/mattn/go-isatty v0.0.20 // indirect
45 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
46 | github.com/modern-go/reflect2 v1.0.2 // indirect
47 | github.com/pmezard/go-difflib v1.0.0 // indirect
48 | github.com/rs/cors v1.7.0 // indirect
49 | github.com/samber/lo v1.47.0 // indirect
50 | github.com/tidwall/pretty v1.2.1 // indirect
51 | github.com/valyala/bytebufferpool v1.0.0 // indirect
52 | github.com/valyala/fasttemplate v1.2.2 // indirect
53 | github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
54 | go.uber.org/multierr v1.10.0 // indirect
55 | golang.org/x/crypto v0.23.0 // indirect
56 | golang.org/x/net v0.25.0 // indirect
57 | golang.org/x/sys v0.25.0 // indirect
58 | golang.org/x/text v0.16.0 // indirect
59 | golang.org/x/time v0.5.0 // indirect
60 | golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
61 | google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506 // indirect
62 | gopkg.in/yaml.v3 v3.0.1 // indirect
63 | nhooyr.io/websocket v1.8.6 // indirect
64 | )
65 |
--------------------------------------------------------------------------------
/internal/chi/chi_web_server.go:
--------------------------------------------------------------------------------
1 | package chi
2 |
3 | import (
4 | "errors"
5 | "fmt"
6 | "io/fs"
7 | "net/http"
8 | "net/http/pprof"
9 | _ "net/http/pprof"
10 |
11 | "github.com/go-chi/chi/v5"
12 | chiMiddleware "github.com/go-chi/chi/v5/middleware"
13 | "github.com/moderato-app/live-pprof/assets"
14 | "github.com/moderato-app/live-pprof/pkg"
15 | )
16 |
17 | func WebServer(middlewares ...func(http.Handler) http.Handler) (*chi.Mux, error) {
18 | router := chi.NewRouter()
19 | router.Use(
20 | chiMiddleware.Logger,
21 | chiMiddleware.Recoverer,
22 | )
23 |
24 | for _, middleware := range middlewares {
25 | router.Use(middleware)
26 | }
27 |
28 | dir, err := staticFS()
29 | if err != nil {
30 | return nil, err
31 | }
32 |
33 | router.Handle("/debug/pprof", http.RedirectHandler("/debug/pprof/", http.StatusTemporaryRedirect))
34 | router.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
35 | router.HandleFunc("/debug/pprof/profile", pprof.Profile)
36 | router.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
37 | router.HandleFunc("/debug/pprof/trace", pprof.Trace)
38 | router.HandleFunc("/debug/pprof/*", pprof.Index)
39 |
40 | router.Handle("/*", http.FileServer(http.FS(dir)))
41 |
42 | return router, nil
43 | }
44 |
45 | // staticFS use web/html as static files. If web/html does not exist,
46 | // extract web/html.zip into a memory FS
47 | func staticFS() (fs.FS, error) {
48 | _, err := assets.Web.Open("web/html")
49 |
50 | if err != nil {
51 | // There are 2 cases when web/html doesn't exist:
52 | // 1. During development when web/html isn't generated yet.
53 | // 2. When live-pprof is installed using `go install github.com/moderato-app/live-pprof`.
54 | // In these cases, we can use the html.zip files as static content. They may not have the latest code,
55 | // but they'll still work.
56 | if errors.Is(err, fs.ErrNotExist) {
57 | z, err := assets.Web.Open("web/html.zip")
58 | if err != nil {
59 | return nil, fmt.Errorf("failed to open web/html.zip: %w", err)
60 | }
61 | defer z.Close()
62 |
63 | mf, err := pkg.Unzip(z)
64 | if err != nil {
65 | return nil, fmt.Errorf("failed to unzip web/html.zip: %w", err)
66 | }
67 | return mf, nil
68 | } else {
69 | return nil, fmt.Errorf("failed to open web/html: %w", err)
70 | }
71 | }
72 |
73 | dir, err := fs.Sub(assets.Web, "web/html")
74 | if err != nil {
75 | return nil, fmt.Errorf("failed to open web/html: %w", err)
76 | }
77 | return dir, nil
78 | }
79 |
--------------------------------------------------------------------------------
/internal/chi/chi_web_server_test.go:
--------------------------------------------------------------------------------
1 | package chi
2 |
3 | import (
4 | "io"
5 | "io/fs"
6 | "net/http"
7 | "net/http/httptest"
8 | "testing"
9 |
10 | "github.com/moderato-app/live-pprof/assets"
11 | "github.com/moderato-app/live-pprof/pkg"
12 |
13 | "github.com/stretchr/testify/assert"
14 | )
15 |
16 | func TestWebServer(t *testing.T) {
17 | chi, err := WebServer()
18 | assert.NoError(t, err)
19 |
20 | ts := httptest.NewServer(chi)
21 |
22 | resp, err := http.Get(ts.URL + "/")
23 | assert.NoError(t, err)
24 | defer resp.Body.Close()
25 |
26 | assert.Equal(t, resp.StatusCode, http.StatusOK)
27 | assert.Contains(t, resp.Header.Get("Content-Type"), "text/html")
28 |
29 | data, err := io.ReadAll(resp.Body)
30 | assert.NoError(t, err)
31 | bodyStr := string(data)
32 | t.Log("body:", bodyStr)
33 |
34 | assert.Contains(t, bodyStr, "Live pprof")
35 | }
36 |
37 | func TestMemFSHTTPServer(t *testing.T) {
38 | z, err := assets.Web.Open("web/html.zip")
39 | assert.NoError(t, err)
40 | defer z.Close()
41 |
42 | assert.NoError(t, err)
43 |
44 | mf, err := pkg.Unzip(z)
45 | assert.NoError(t, err)
46 |
47 | ts := httptest.NewServer(http.FileServer(http.FS(mf)))
48 |
49 | resp, err := http.Get(ts.URL + "/")
50 | assert.NoError(t, err)
51 | defer resp.Body.Close()
52 |
53 | assert.Equal(t, resp.StatusCode, http.StatusOK)
54 | assert.Contains(t, resp.Header.Get("Content-Type"), "text/html")
55 |
56 | data, err := io.ReadAll(resp.Body)
57 | assert.NoError(t, err)
58 | bodyStr := string(data)
59 | t.Log("body:", bodyStr)
60 |
61 | assert.Contains(t, bodyStr, "Live pprof")
62 | }
63 |
64 | func TestFileNotExists(t *testing.T) {
65 | _, err := assets.Web.Open("web/html2")
66 | assert.ErrorIs(t, err, fs.ErrNotExist)
67 | }
68 |
--------------------------------------------------------------------------------
/internal/chi/middleware.go:
--------------------------------------------------------------------------------
1 | package chi
2 |
3 | import (
4 | "net/http"
5 |
6 | "github.com/improbable-eng/grpc-web/go/grpcweb"
7 | )
8 |
9 | func GrpcMiddleware(grpcWeb *grpcweb.WrappedGrpcServer) func(next http.Handler) http.Handler {
10 | return func(next http.Handler) http.Handler {
11 | return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
12 | if grpcWeb.IsAcceptableGrpcCorsRequest(r) || grpcWeb.IsGrpcWebRequest(r) {
13 | grpcWeb.ServeHTTP(w, r)
14 | return
15 | }
16 | next.ServeHTTP(w, r)
17 | })
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/internal/config/live-pprof-config.go:
--------------------------------------------------------------------------------
1 | package config
2 |
3 | import (
4 | "fmt"
5 | "os"
6 |
7 | "github.com/moderato-app/live-pprof/internal/logging"
8 |
9 | flag "github.com/spf13/pflag"
10 | )
11 |
12 | type LivePprofConfig struct {
13 | Host string
14 | Port uint
15 |
16 | PprofURL string
17 | NoBrowser bool
18 | }
19 |
20 | func ParseLPFlags() *LivePprofConfig {
21 | config := &LivePprofConfig{}
22 |
23 | help := false
24 | flag.UintVarP(&config.Port, "port", "p", 8300, "port to listen on")
25 | flag.StringVar(&config.Host, "host", "0.0.0.0", "host to listen on")
26 | flag.BoolVarP(&help, "help", "h", false, "help")
27 |
28 | flag.BoolVarP(&config.NoBrowser, "no-browser", "n", false, "don't open browser")
29 |
30 | flag.Parse()
31 |
32 | args := flag.Args()
33 | if len(args) == 1 {
34 | config.PprofURL = args[0]
35 | } else if len(args) > 1 {
36 | _, _ = fmt.Fprintf(os.Stderr, "Expected 0 or 1 arg, but %d were given: %v\n", len(args), args)
37 | config.printHelp()
38 | os.Exit(0)
39 | }
40 |
41 | if help {
42 | config.printHelp()
43 | os.Exit(0)
44 | }
45 |
46 | logging.Sugar.Infow("flags parsed", "config", config)
47 | return config
48 | }
49 |
50 | func (config *LivePprofConfig) printHelp() {
51 | fmt.Println()
52 | fmt.Println("Usage Example:")
53 | fmt.Println(" live-pprof")
54 | fmt.Println(" open the browser and wait for instructions")
55 | fmt.Println()
56 | fmt.Println(" live-pprof 8080")
57 | fmt.Println(" open the browser and start to monitor http://localhost:8080/debug/pprof")
58 | fmt.Println(" equivalent to `live-pprof http://localhost:8080/debug/pprof`")
59 | fmt.Println(" live-pprof localhost:8080")
60 | fmt.Println(" open the browser and start to monitor http://localhost:8080")
61 | fmt.Println(" live-pprof http://localhost:8080")
62 | fmt.Println(" open the browser and start to monitor http://localhost:8080")
63 | fmt.Println(" live-pprof https://example.com/perf")
64 | fmt.Println(" open the browser and start to monitor https://example.com/perf")
65 | fmt.Println()
66 | fmt.Println(" live-pprof -n")
67 | fmt.Println(" don't open the browser")
68 | fmt.Println(" live-pprof --host 192.168.0.200 -port 1800")
69 | fmt.Println(" listen on 192.168.0.200:1800")
70 | fmt.Println()
71 | fmt.Println("Help")
72 | flag.PrintDefaults()
73 | }
74 |
--------------------------------------------------------------------------------
/internal/echo/echo_web_server.go:
--------------------------------------------------------------------------------
1 | package echo
2 |
3 | import (
4 | "io/fs"
5 | "net/http"
6 |
7 | "github.com/moderato-app/live-pprof/assets"
8 | "github.com/moderato-app/live-pprof/internal/logging"
9 |
10 | "github.com/brpaz/echozap"
11 | "github.com/improbable-eng/grpc-web/go/grpcweb"
12 | echo "github.com/labstack/echo/v4"
13 | "github.com/labstack/echo/v4/middleware"
14 | "github.com/labstack/gommon/log"
15 | )
16 |
17 | func WebServer(g *grpcweb.WrappedGrpcServer) *echo.Echo {
18 | logging.Sugar.Info("initialise web server...")
19 | e := echo.New()
20 | e.Logger.SetLevel(log.DEBUG)
21 | e.HideBanner = true
22 |
23 | e.Use(echozap.ZapLogger(logging.Logger))
24 | e.Use(middleware.Logger())
25 | e.Use(middleware.Recover())
26 | e.Use(grpcMiddleware(g))
27 |
28 | e.Use(AllowAllCors)
29 |
30 | w, err := fs.Sub(assets.Web, "web/html")
31 | if err != nil {
32 | logging.Sugar.Panic(err)
33 | }
34 |
35 | s := e.Group("/*")
36 | s.Use(middleware.Gzip())
37 | h := http.FileServer(http.FS(w))
38 | s.Any("/*", func(c echo.Context) error {
39 | h.ServeHTTP(c.Response(), c.Request())
40 | return nil
41 | })
42 | return e
43 | }
44 |
--------------------------------------------------------------------------------
/internal/echo/middleware.go:
--------------------------------------------------------------------------------
1 | package echo
2 |
3 | import (
4 | "github.com/improbable-eng/grpc-web/go/grpcweb"
5 | "github.com/labstack/echo/v4"
6 | "github.com/labstack/echo/v4/middleware"
7 | )
8 |
9 | var AllowAllCors = middleware.CORSWithConfig(middleware.CORSConfig{
10 | AllowOrigins: []string{"*"},
11 | AllowHeaders: []string{"*", "Authorization"},
12 | AllowMethods: []string{"*"},
13 | ExposeHeaders: []string{"*"},
14 | })
15 |
16 | func grpcMiddleware(grpcWeb *grpcweb.WrappedGrpcServer) echo.MiddlewareFunc {
17 | return func(next echo.HandlerFunc) echo.HandlerFunc {
18 | return func(c echo.Context) (returnErr error) {
19 | if grpcWeb.IsAcceptableGrpcCorsRequest(c.Request()) || grpcWeb.IsGrpcWebRequest(c.Request()) {
20 | grpcWeb.ServeHTTP(c.Response(), c.Request())
21 | return nil
22 | } else {
23 | return next(c)
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/internal/general/general_server.go:
--------------------------------------------------------------------------------
1 | package general
2 |
3 | import (
4 | "context"
5 | "io"
6 | "net/http"
7 | "strings"
8 | "sync"
9 | "time"
10 |
11 | "github.com/moderato-app/live-pprof/api"
12 | "github.com/moderato-app/live-pprof/internal/logging"
13 | "github.com/moderato-app/live-pprof/internal/metrics"
14 | )
15 |
16 | type GeneralServer struct {
17 | api.UnimplementedGeneralServer
18 | }
19 |
20 | func NewGeneralServer() *GeneralServer {
21 | return &GeneralServer{}
22 | }
23 |
24 | func (m *GeneralServer) DetectURL(req *api.DetectURLRequest, stream api.General_DetectURLServer) error {
25 | logging.Sugar.Debug("DetectURL req:", req)
26 | wg := sync.WaitGroup{}
27 | mts := [...]metrics.MetricsType{
28 | metrics.MetricsTypeHeap,
29 | metrics.MetricsTypeCPU,
30 | metrics.MetricsTypeAllocs,
31 | metrics.MetricsTypeGoroutine,
32 | }
33 |
34 | urls := make([]string, 0, 5)
35 | urls = append(urls, req.Url)
36 | for _, mt := range mts {
37 | url, err := metrics.MetricsURL(true, mt, req.Url, 1)
38 | if err != nil {
39 | logging.Sugar.Error(err)
40 | panic(err)
41 | }
42 | urls = append(urls, url)
43 | }
44 |
45 | for _, url := range urls {
46 | wg.Add(1)
47 | go func(url string) {
48 | defer wg.Done()
49 | ctx, cancel := context.WithTimeout(stream.Context(), 3*time.Second)
50 | defer cancel()
51 | result, err := detect(ctx, url)
52 | var errMsg *string
53 | if err != nil {
54 | msg := err.Error()
55 | errMsg = &msg
56 | }
57 | resp := api.DetectURLResponse{
58 | Endpoint: url,
59 | HttpResult: result,
60 | Error: errMsg,
61 | }
62 | err = stream.Send(&resp)
63 | if err != nil {
64 | logging.Sugar.Error(err)
65 | }
66 | }(url)
67 | }
68 | wg.Wait()
69 | return nil
70 | }
71 |
72 | func detect(ctx context.Context, url string) (*api.HTTPResult, error) {
73 | client := &http.Client{}
74 | logging.Sugar.Debugf("GET %s", url)
75 |
76 | method := http.MethodGet
77 |
78 | // don't fetch /profile endpoint since only returns data in pb.gz format
79 | if strings.Contains(url, "/profile?seconds=") {
80 | method = http.MethodHead
81 | }
82 | req, err := http.NewRequestWithContext(ctx, method, url, nil)
83 | if err != nil {
84 | return nil, err
85 | }
86 | resp, err := client.Do(req)
87 | if err != nil {
88 | return nil, err
89 | }
90 | defer func() { _ = resp.Body.Close() }()
91 |
92 | data, err := io.ReadAll(resp.Body)
93 |
94 | if resp.StatusCode < 200 || resp.StatusCode > 399 {
95 | logging.Sugar.Info("resp.Body: \n" + string(data))
96 | }
97 |
98 | bodyStr := string(data)
99 |
100 | return &api.HTTPResult{
101 | StatusCode: int32(resp.StatusCode),
102 | StatusText: resp.Status,
103 | Body: &bodyStr,
104 | }, nil
105 | }
106 |
--------------------------------------------------------------------------------
/internal/live-pprof.go:
--------------------------------------------------------------------------------
1 | package internal
2 |
3 | import (
4 | "net/url"
5 | "strconv"
6 | "strings"
7 | "time"
8 |
9 | "github.com/moderato-app/live-pprof/api"
10 | "github.com/moderato-app/live-pprof/internal/config"
11 | "github.com/moderato-app/live-pprof/internal/general"
12 | "github.com/moderato-app/live-pprof/internal/logging"
13 | "github.com/moderato-app/live-pprof/internal/metrics"
14 | "github.com/moderato-app/live-pprof/internal/util"
15 |
16 | "github.com/pkg/browser"
17 | "google.golang.org/grpc"
18 | )
19 |
20 | func LivePprof() {
21 | conf := config.ParseLPFlags()
22 |
23 | var opts []grpc.ServerOption
24 | grpcServer := grpc.NewServer(opts...)
25 |
26 | api.RegisterMetricsServer(grpcServer, metrics.NewMetricsServer())
27 | api.RegisterMockMetricsServer(grpcServer, metrics.NewMockMetricsServer())
28 | api.RegisterGeneralServer(grpcServer, general.NewGeneralServer())
29 |
30 | go func() {
31 | time.Sleep(time.Second)
32 | maybeOpenURL(conf)
33 | }()
34 |
35 | StartServeGrpc(grpcServer, conf)
36 | }
37 |
38 | func maybeOpenURL(conf *config.LivePprofConfig) {
39 | goRun := util.IsRunningAsGoRun()
40 | if conf.NoBrowser || goRun {
41 | logging.Sugar.Debugw("will not open the browser", "conf.NoBrowser", conf.NoBrowser,
42 | "IsRunningAsGoRun", goRun)
43 | return
44 | }
45 | u := url.URL{
46 | Scheme: "http",
47 | Host: strings.Replace(conf.Host, "0.0.0.0", "localhost", 1) + ":" + strconv.Itoa(int(conf.Port)),
48 | }
49 |
50 | params := url.Values{}
51 | if conf.PprofURL != "" {
52 | params.Add("pprof-url", conf.PprofURL)
53 | }
54 | u.RawQuery = params.Encode()
55 |
56 | logging.Sugar.Infof("opening %s in the browser\n", u.String())
57 |
58 | _ = browser.OpenURL(u.String())
59 | }
60 |
--------------------------------------------------------------------------------
/internal/logging/logging.go:
--------------------------------------------------------------------------------
1 | package logging
2 |
3 | import (
4 | "go.uber.org/zap"
5 | "go.uber.org/zap/zapcore"
6 | )
7 |
8 | func DefaultLogger() *zap.Logger {
9 | cfg := zap.NewProductionConfig()
10 | cfg.Level = zap.NewAtomicLevelAt(zapcore.DebugLevel)
11 | cfg.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
12 | //cfg.EncoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
13 | cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
14 | cfg.EncoderConfig.EncodeDuration = zapcore.StringDurationEncoder
15 | cfg.Encoding = "console"
16 | logger, _ := cfg.Build()
17 | return logger
18 | }
19 |
20 | var Logger = DefaultLogger()
21 | var Sugar = Logger.Sugar()
22 |
--------------------------------------------------------------------------------
/internal/metrics/metrics_type.go:
--------------------------------------------------------------------------------
1 | package metrics
2 |
3 | import (
4 | "errors"
5 | "net/url"
6 | "strconv"
7 | )
8 |
9 | type MetricsType string
10 |
11 | const (
12 | MetricsTypeHeap = "heap"
13 | MetricsTypeCPU = "profile"
14 | MetricsTypeAllocs = "allocs"
15 | MetricsTypeGoroutine = "goroutine"
16 | )
17 |
18 | // MetricsURL generates a URL that works with Go's net/http/pprof.
19 | //
20 | // If debug is true, it fetches data in text format(except for MetricsTypeCPU).
21 | // If debug is false, it fetches data in pb.gz format.
22 | func MetricsURL(debug bool, mt MetricsType, urlStr string, profileSeconds uint64) (string, error) {
23 | parse, err := url.Parse(urlStr)
24 | if err != nil {
25 | return "", errors.New("invalid url: " + urlStr)
26 | }
27 |
28 | var p *url.URL
29 | params := url.Values{}
30 |
31 | p = parse.JoinPath(string(mt))
32 |
33 | if mt == MetricsTypeCPU {
34 | var sec = uint64(1)
35 | if profileSeconds > 1 {
36 | sec = profileSeconds
37 | }
38 | params.Add("seconds", strconv.Itoa(int(sec)))
39 | } else if debug {
40 | params.Add("debug", "1")
41 | }
42 | p.RawQuery = params.Encode()
43 |
44 | return p.String(), nil
45 | }
46 |
--------------------------------------------------------------------------------
/internal/metrics/mock_metrics_server.go:
--------------------------------------------------------------------------------
1 | //go:build !prod
2 |
3 | package metrics
4 |
5 | import (
6 | "context"
7 |
8 | "github.com/moderato-app/live-pprof/api"
9 | "github.com/moderato-app/live-pprof/internal/logging"
10 | )
11 |
12 | // MockMetricsServer returns mock data instead of real data to save development time
13 | type MockMetricsServer struct {
14 | api.UnimplementedMockMetricsServer
15 |
16 | mockResources *MockAssets
17 | }
18 |
19 | func NewMockMetricsServer() *MockMetricsServer {
20 | return &MockMetricsServer{
21 | mockResources: newMockAssets(),
22 | }
23 | }
24 |
25 | func (m *MockMetricsServer) HeapMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
26 | logging.Sugar.Debug("HeapMetrics req:", req)
27 | return m.dispatch(req, MetricsTypeHeap)
28 | }
29 |
30 | func (m *MockMetricsServer) CPUMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
31 | logging.Sugar.Debug("CPUMetrics req:", req)
32 | return m.dispatch(req, MetricsTypeCPU)
33 | }
34 |
35 | func (m *MockMetricsServer) AllocsMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
36 | logging.Sugar.Debug("AllocsMetrics req:", req)
37 | return m.dispatch(req, MetricsTypeAllocs)
38 | }
39 |
40 | func (m *MockMetricsServer) GoroutineMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
41 | logging.Sugar.Debug("GoroutineMetrics req:", req)
42 | return m.dispatch(req, MetricsTypeGoroutine)
43 | }
44 |
45 | func (m *MockMetricsServer) dispatch(req *api.GoMetricsRequest, mt MetricsType) (*api.GoMetricsResponse, error) {
46 | _, err := MetricsURL(false, mt, req.Url, req.ProfileSeconds)
47 | if err != nil {
48 | return nil, err
49 | }
50 |
51 | mtr, err := m.mockResources.GetMetrics(mt)
52 | if err != nil {
53 | logging.Sugar.Error(err)
54 | return nil, err
55 | }
56 | resp := toResp(mtr)
57 |
58 | return resp, nil
59 | }
60 |
--------------------------------------------------------------------------------
/internal/metrics/mock_metrics_server_prod.go:
--------------------------------------------------------------------------------
1 | //go:build prod
2 |
3 | package metrics
4 |
5 | import (
6 | "context"
7 | "errors"
8 |
9 | "github.com/moderato-app/live-pprof/api"
10 | "github.com/moderato-app/live-pprof/internal/logging"
11 | )
12 |
13 | var mockNotAvailableErr = errors.New("mock data is not available for a prod build")
14 |
15 | // MockMetricsServer returns mock data instead of real data to save development time
16 | type MockMetricsServer struct {
17 | api.UnimplementedMockMetricsServer
18 | }
19 |
20 | func NewMockMetricsServer() *MockMetricsServer {
21 | return &MockMetricsServer{}
22 | }
23 |
24 | func (m *MockMetricsServer) HeapMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
25 | logging.Sugar.Debug("HeapMetrics req:", req)
26 | return nil, mockNotAvailableErr
27 | }
28 |
29 | func (m *MockMetricsServer) CPUMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
30 | logging.Sugar.Debug("CPUMetrics req:", req)
31 | return nil, mockNotAvailableErr
32 | }
33 |
34 | func (m *MockMetricsServer) AllocsMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
35 | logging.Sugar.Debug("AllocsMetrics req:", req)
36 | return nil, mockNotAvailableErr
37 | }
38 |
39 | func (m *MockMetricsServer) GoroutineMetrics(_ context.Context, req *api.GoMetricsRequest) (*api.GoMetricsResponse, error) {
40 | logging.Sugar.Debug("GoroutineMetrics req:", req)
41 | return nil, mockNotAvailableErr
42 | }
43 |
--------------------------------------------------------------------------------
/internal/rpc.go:
--------------------------------------------------------------------------------
1 | package internal
2 |
3 | import (
4 | "fmt"
5 | "log"
6 | "net"
7 | "net/http"
8 | "os"
9 | "os/signal"
10 | "strings"
11 | "syscall"
12 | "time"
13 |
14 | chi2 "github.com/moderato-app/live-pprof/internal/chi"
15 | "github.com/moderato-app/live-pprof/internal/config"
16 | "github.com/moderato-app/live-pprof/internal/logging"
17 |
18 | "github.com/improbable-eng/grpc-web/go/grpcweb"
19 | "google.golang.org/grpc"
20 | )
21 |
22 | func StartServeGrpc(gs *grpc.Server, conf *config.LivePprofConfig) {
23 | l, port, err := findPort(conf.Port, conf.Host)
24 | if err != nil {
25 | logging.Sugar.Fatal(err)
26 | }
27 | conf.Port = port
28 |
29 | logging.Sugar.Infof("listening on %s", l.Addr().String())
30 | addr := fmt.Sprintf("%s:%d", strings.Replace(conf.Host, "0.0.0.0", "localhost", 1), port)
31 |
32 | //goland:noinspection HttpUrlsUsage
33 | httpURL := "http://" + addr
34 | logging.Sugar.Info("click to open: ", httpURL)
35 |
36 | stopChan := make(chan os.Signal, 1)
37 | signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM)
38 |
39 | wrappedGrpc := grpcweb.WrapServer(gs, grpcweb.WithOriginFunc(func(origin string) bool {
40 | return true
41 | }))
42 | s, err := chi2.WebServer(chi2.GrpcMiddleware(wrappedGrpc))
43 |
44 | if err != nil {
45 | logging.Sugar.Panic("failed to init WebServer", err)
46 | }
47 |
48 | go func() {
49 | if err := http.Serve(l, s); err != nil {
50 | log.Fatalf("failed starting http2 server: %v", err)
51 | }
52 | }()
53 |
54 | <-stopChan
55 | gracefulShutdown(gs)
56 |
57 | }
58 |
59 | func findPort(port uint, host string) (net.Listener, uint, error) {
60 | for {
61 | if port > 65535 || port == 0 {
62 | return nil, 0, fmt.Errorf("port %d is out of range [1, 65535]", port)
63 | }
64 | addr := fmt.Sprintf("%s:%d", host, port)
65 | l, err := net.Listen("tcp", addr)
66 | if err != nil {
67 | // port already in use
68 | if strings.Contains(err.Error(), "bind: address already in use") {
69 | logging.Sugar.Warnf("address %s already in use, will use a port %d", addr, port+1)
70 | port++
71 | } else {
72 | return nil, 0, err
73 | }
74 | } else {
75 | return l, port, nil
76 | }
77 | }
78 | }
79 |
80 | func gracefulShutdown(s *grpc.Server) {
81 | logging.Sugar.Info("shutting down gRPC server gracefully")
82 | doneChan := make(chan struct{})
83 | go func() {
84 | s.GracefulStop()
85 | doneChan <- struct{}{}
86 | }()
87 |
88 | t := time.NewTicker(30 * time.Second)
89 | for {
90 | select {
91 | case <-doneChan:
92 | return
93 | case <-t.C:
94 | return
95 | }
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/internal/util/util.go:
--------------------------------------------------------------------------------
1 | package util
2 |
3 | import (
4 | "fmt"
5 | "os"
6 | "strings"
7 | )
8 |
9 | func IsRunningAsGoRun() bool {
10 | execPath, err := os.Executable()
11 | if err != nil {
12 | return false
13 | }
14 |
15 | fmt.Printf("exec path: %s\n", execPath)
16 | // go run
17 | res := strings.Contains(execPath, "go-build")
18 | // GoLand
19 | res = res || strings.Contains(execPath, "go_build")
20 |
21 | return res
22 | }
23 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/moderato-app/live-pprof/internal"
5 | )
6 |
7 | func main() {
8 | internal.LivePprof()
9 | }
10 |
--------------------------------------------------------------------------------
/pkg/test_data/html.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/moderato-app/live-pprof/573e0e771949f018ce486e86529bdc197a7c7327/pkg/test_data/html.zip
--------------------------------------------------------------------------------
/pkg/zip.go:
--------------------------------------------------------------------------------
1 | package pkg
2 |
3 | import (
4 | "archive/zip"
5 | "bytes"
6 | "fmt"
7 | "io"
8 | "io/fs"
9 | "path/filepath"
10 | "strings"
11 |
12 | "github.com/psanford/memfs"
13 | )
14 |
15 | // Unzip extract a zipFile to a memfs.FS
16 | func Unzip(zipFIle fs.File) (*memfs.FS, error) {
17 |
18 | stat, err := zipFIle.Stat()
19 | if err != nil {
20 | return nil, err
21 | }
22 |
23 | buf := make([]byte, stat.Size())
24 | read, err := zipFIle.Read(buf)
25 | if err != nil {
26 | return nil, err
27 | }
28 |
29 | if read != int(stat.Size()) {
30 | return nil, fmt.Errorf("expected %d bytes, got %d", stat.Size(), read)
31 | }
32 |
33 | r := bytes.NewReader(buf)
34 |
35 | reader, err := zip.NewReader(r, stat.Size())
36 | if err != nil {
37 | return nil, err
38 | }
39 |
40 | rootFS := memfs.New()
41 |
42 | err = unzip(reader, rootFS)
43 | if err != nil {
44 | return nil, err
45 | }
46 | return rootFS, nil
47 | }
48 |
49 | // https://stackoverflow.com/a/24792688
50 | // unzip extract a zip file to memfs
51 | func unzip(zipReader *zip.Reader, fs *memfs.FS) error {
52 |
53 | // Closure to address file descriptors issue with all the deferred .Close() methods
54 | extractAndWriteFile := func(f *zip.File) error {
55 | rc, err := f.Open()
56 | if err != nil {
57 | panic(err)
58 | }
59 | defer func() {
60 | if err := rc.Close(); err != nil {
61 | panic(err)
62 | }
63 | }()
64 |
65 | path := f.Name
66 |
67 | //// Check for ZipSlip (Directory traversal)
68 | //if !strings.HasPrefix(path, filepath.Clean("/")+string(os.PathSeparator)) {
69 | // return fmt.Errorf("illegal file path: %s", path)
70 | //}
71 |
72 | if f.FileInfo().IsDir() {
73 | err := fs.MkdirAll(strings.TrimSuffix(path, "/"), f.Mode())
74 | if err != nil {
75 | panic(err)
76 | }
77 | } else {
78 | err := fs.MkdirAll(filepath.Dir(path), f.Mode())
79 | if err != nil {
80 | panic(err)
81 | }
82 |
83 | data, err := io.ReadAll(rc)
84 | if err != nil {
85 | panic(err)
86 |
87 | }
88 | err = fs.WriteFile(path, data, 0755)
89 |
90 | if err != nil {
91 | panic(err)
92 | }
93 | }
94 | return nil
95 | }
96 |
97 | for _, f := range zipReader.File {
98 | err := extractAndWriteFile(f)
99 | if err != nil {
100 | panic(err)
101 | }
102 | }
103 |
104 | return nil
105 | }
106 |
--------------------------------------------------------------------------------
/pkg/zip_test.go:
--------------------------------------------------------------------------------
1 | package pkg
2 |
3 | import (
4 | "embed"
5 | "io"
6 | "testing"
7 |
8 | "github.com/stretchr/testify/assert"
9 | )
10 |
11 | //go:embed all:test_data
12 | var TestData embed.FS
13 |
14 | func TestUnzip(t *testing.T) {
15 | z, err := TestData.Open("test_data/html.zip")
16 | defer z.Close()
17 | assert.NoError(t, err)
18 |
19 | fs, err := Unzip(z)
20 | assert.NoError(t, err)
21 |
22 | html, err := fs.Open("index.html")
23 | assert.NoError(t, err)
24 |
25 | stat, err := html.Stat()
26 | assert.NoError(t, err)
27 |
28 | assert.Greater(t, stat.Size(), int64(0))
29 | all, err := io.ReadAll(html)
30 | assert.NoError(t, err)
31 |
32 | assert.Contains(t, string(all), "Live pprof")
33 | }
34 |
--------------------------------------------------------------------------------
/proto/api.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 | package server;
3 |
4 | option go_package = "github.com/moderato-app/live-pprof/api";
5 |
6 | service Metrics {
7 | rpc HeapMetrics(GoMetricsRequest) returns (GoMetricsResponse);
8 | rpc CPUMetrics(GoMetricsRequest) returns (GoMetricsResponse);
9 | rpc AllocsMetrics(GoMetricsRequest) returns (GoMetricsResponse);
10 | rpc GoroutineMetrics(GoMetricsRequest) returns (GoMetricsResponse);
11 | }
12 |
13 | // MockMetrics returns mock data instead of real data to save development time
14 | service MockMetrics {
15 | rpc HeapMetrics(GoMetricsRequest) returns (GoMetricsResponse);
16 | rpc CPUMetrics(GoMetricsRequest) returns (GoMetricsResponse);
17 | rpc AllocsMetrics(GoMetricsRequest) returns (GoMetricsResponse);
18 | rpc GoroutineMetrics(GoMetricsRequest) returns (GoMetricsResponse);
19 | }
20 |
21 | service General {
22 | rpc DetectURL(DetectURLRequest) returns (stream DetectURLResponse);
23 | }
24 |
25 | message GoMetricsRequest {
26 | string url = 1;
27 | // cpu profile only
28 | uint64 profile_seconds = 2;
29 | }
30 |
31 | message GoMetricsResponse {
32 | int64 date = 1;
33 | repeated Item items = 2;
34 | int64 total = 3;
35 | }
36 |
37 | message Item {
38 | string func = 1;
39 | string line = 2;
40 | int64 flat = 3 ;
41 | int64 cum = 4;
42 | }
43 |
44 | message DetectURLRequest {
45 | string url = 1;
46 | }
47 |
48 | message DetectURLResponse {
49 | string endpoint = 1;
50 |
51 | optional HTTPResult httpResult = 2;
52 | optional string error = 4;
53 | }
54 |
55 | message HTTPResult{
56 | int32 statusCode = 1;
57 | string statusText = 2;
58 | optional string body = 3;
59 | }
--------------------------------------------------------------------------------
/tests/e2e/run_binary_test.go:
--------------------------------------------------------------------------------
1 | //go:build e2e
2 |
3 | package e2e
4 |
5 | import (
6 | "fmt"
7 | "net/http"
8 | "strconv"
9 | "testing"
10 |
11 | . "github.com/Eun/go-hit"
12 | "github.com/go-cmd/cmd"
13 | . "github.com/moderato-app/live-pprof/tests/framework"
14 | "github.com/stretchr/testify/assert"
15 | )
16 |
17 | //goland:noinspection HttpUrlsUsage
18 | func TestRunBinary(t *testing.T) {
19 |
20 | binary, err := FindBinary(t)
21 | assert.NoError(t, err, "failed to find binary")
22 |
23 | host := "localhost"
24 | port := 12345
25 |
26 | c := cmd.NewCmd(binary, "-n", "--port", strconv.Itoa(port), "--host", host)
27 |
28 | c.Start()
29 | defer c.Stop()
30 |
31 | WaitForRunningOrFail(t, c, true)
32 |
33 | assert.True(t, LogContainsText(c.Status(), "listening on localhost:12345") ||
34 | LogContainsText(c.Status(), "listening on 127.0.0.1:12345"), WhatsWrong(c.Status()))
35 |
36 | url := fmt.Sprintf("http://%s:%d", host, port)
37 |
38 | Test(t,
39 | Description("Get home page: "+url),
40 | Get(url),
41 | Expect().Status().Equal(http.StatusOK),
42 | Expect().Body().String().Contains("Live pprof"),
43 | )
44 |
45 | url = fmt.Sprintf("http://%s:%d/favicon.ico", host, port)
46 |
47 | Test(t,
48 | Description("Get favicon.ico: "+url),
49 | Get(url),
50 | Expect().Status().Equal(http.StatusOK),
51 | Expect().Headers("content-type").First().Contains("image"),
52 | Expect().Body().Bytes().Len().GreaterThan(0),
53 | )
54 | }
55 |
--------------------------------------------------------------------------------
/tests/framework/util.go:
--------------------------------------------------------------------------------
1 | package framework
2 |
3 | import (
4 | "encoding/json"
5 | "errors"
6 | "fmt"
7 | "os"
8 | "os/exec"
9 | "path"
10 | "runtime"
11 | "strings"
12 | "testing"
13 | "time"
14 |
15 | "github.com/go-cmd/cmd"
16 | "github.com/stretchr/testify/assert"
17 | )
18 |
19 | func FindBinary(t *testing.T) (string, error) {
20 |
21 | binaryName := "live-pprof"
22 |
23 | rootDir := RootDir(t)
24 | fileName := path.Join(rootDir, "build", binaryName)
25 |
26 | _, err := os.Stat(fileName)
27 |
28 | if err != nil {
29 | if os.IsNotExist(err) {
30 | if runtime.GOOS != "linux" && runtime.GOOS != "windows" && runtime.GOOS != "darwin" {
31 | return "", fmt.Errorf("unsupported OS: %s", runtime.GOOS)
32 | }
33 | fileName = path.Join(rootDir, "build", fmt.Sprintf("%s-%s-%s", binaryName, runtime.GOOS, runtime.GOARCH))
34 |
35 | if runtime.GOOS == "windows" {
36 | fileName += ".exe"
37 | }
38 | if _, err := os.Stat(fileName); os.IsNotExist(err) {
39 | return "", fmt.Errorf("binary not found: %s, %v", fileName, err)
40 | }
41 | } else {
42 | return "", fmt.Errorf("binary not found: %s, %v", fileName, err)
43 | }
44 | }
45 | return fileName, nil
46 | }
47 |
48 | func IsRunning(s cmd.Status) bool {
49 | return s.Error == nil && s.StartTs > 0 && !s.Complete && s.Exit == -1
50 | }
51 |
52 | func LogContainsText(s cmd.Status, text string) bool {
53 | for _, line := range s.Stdout {
54 | if strings.Contains(line, text) {
55 | return true
56 | }
57 | }
58 | for _, line := range s.Stderr {
59 | if strings.Contains(line, text) {
60 | return true
61 | }
62 | }
63 | return false
64 | }
65 |
66 | func WhatsWrong(s cmd.Status) error {
67 | if s.Error != nil {
68 | return s.Error
69 | }
70 |
71 | marshal, err := json.Marshal(s)
72 | if err != nil {
73 | return err
74 | }
75 | return errors.New("debug info: " + string(marshal))
76 | }
77 |
78 | // WaitForRunningOrFail checks if stdout or stderr has content when mustWaitForStdOutput is true.
79 | // mustWaitForStdOutput is useful when the OS performs security checks on the binary, which can be
80 | // terribly slow on macOS.
81 | func WaitForRunningOrFail(t *testing.T, c *cmd.Cmd, mustWaitForStdOutput bool) {
82 | timer := time.NewTimer(100 * time.Second)
83 | ticker := time.NewTicker(100 * time.Millisecond)
84 | defer timer.Stop()
85 | defer ticker.Stop()
86 |
87 | for {
88 | select {
89 | case <-timer.C:
90 | t.Fatalf("failed to start: %v", WhatsWrong(c.Status()))
91 | case <-ticker.C:
92 | status := c.Status()
93 | if IsRunning(status) {
94 | if mustWaitForStdOutput {
95 | if len(status.Stdout) > 0 || len(status.Stderr) > 0 {
96 | return
97 | }
98 | } else {
99 | return
100 | }
101 | }
102 | }
103 | }
104 |
105 | }
106 |
107 | func RootDir(t *testing.T) string {
108 | cmdOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output()
109 | assert.NoError(t, err)
110 | return strings.TrimSpace(string(cmdOut))
111 | }
112 |
--------------------------------------------------------------------------------
/tests/framework/util_test.go:
--------------------------------------------------------------------------------
1 | package framework
2 |
3 | import (
4 | "os"
5 | "path/filepath"
6 | "testing"
7 |
8 | "github.com/stretchr/testify/assert"
9 | )
10 |
11 | func TestRootDir(t *testing.T) {
12 | wd, err := os.Getwd()
13 | assert.NoError(t, err)
14 |
15 | rootDir := filepath.Dir(filepath.Dir(wd))
16 | assert.Equal(t, RootDir(t), rootDir)
17 | }
18 |
--------------------------------------------------------------------------------
/ts/.env.development:
--------------------------------------------------------------------------------
1 | NEXT_PUBLIC_BACKEND_URL=http://localhost:8300
--------------------------------------------------------------------------------
/ts/.eslintignore:
--------------------------------------------------------------------------------
1 | .now/*
2 | *.css
3 | .changeset
4 | esm/*
5 | public/*
6 | tests/*
7 | scripts/*
8 | *.config.js
9 | .DS_Store
10 | node_modules
11 | coverage
12 | .next
13 | !.commitlintrc.cjs
14 | !.lintstagedrc.cjs
15 | !jest.config.js
16 | !plopfile.js
17 | !react-shim.js
18 | !tsup.config.ts
--------------------------------------------------------------------------------
/ts/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/eslintrc.json",
3 | "env": {
4 | "browser": false,
5 | "es2021": true,
6 | "node": true
7 | },
8 | "extends": [
9 | "plugin:react/recommended",
10 | "plugin:prettier/recommended",
11 | "plugin:react-hooks/recommended",
12 | "plugin:jsx-a11y/recommended"
13 | ],
14 | "plugins": [
15 | "react",
16 | "unused-imports",
17 | "import",
18 | "@typescript-eslint",
19 | "jsx-a11y",
20 | "prettier"
21 | ],
22 | "parser": "@typescript-eslint/parser",
23 | "parserOptions": {
24 | "ecmaFeatures": {
25 | "jsx": true
26 | },
27 | "ecmaVersion": 12,
28 | "sourceType": "module"
29 | },
30 | "settings": {
31 | "react": {
32 | "version": "detect"
33 | }
34 | },
35 | "rules": {
36 | "no-console": "off",
37 | "react/prop-types": "off",
38 | "react/jsx-uses-react": "off",
39 | "react/react-in-jsx-scope": "off",
40 | "react-hooks/exhaustive-deps": "off",
41 | "jsx-a11y/click-events-have-key-events": "warn",
42 | "jsx-a11y/interactive-supports-focus": "warn",
43 | "prettier/prettier": "warn",
44 | "no-unused-vars": "off",
45 | "unused-imports/no-unused-vars": "off",
46 | "unused-imports/no-unused-imports": "warn",
47 | "@typescript-eslint/no-unused-vars": [
48 | "warn",
49 | {
50 | "args": "after-used",
51 | "ignoreRestSiblings": false,
52 | "argsIgnorePattern": "^_.*?$"
53 | }
54 | ],
55 | "import/order": [
56 | "warn",
57 | {
58 | "groups": [
59 | "type",
60 | "builtin",
61 | "object",
62 | "external",
63 | "internal",
64 | "parent",
65 | "sibling",
66 | "index"
67 | ],
68 | "pathGroups": [
69 | {
70 | "pattern": "~/**",
71 | "group": "external",
72 | "position": "after"
73 | }
74 | ],
75 | "newlines-between": "always"
76 | }
77 | ],
78 | "react/self-closing-comp": "warn",
79 | "react/jsx-sort-props": [
80 | "warn",
81 | {
82 | "callbacksLast": true,
83 | "shorthandFirst": true,
84 | "noSortAlphabetically": false,
85 | "reservedFirst": true
86 | }
87 | ]
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/ts/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
37 | components/api/*
--------------------------------------------------------------------------------
/ts/.npmrc:
--------------------------------------------------------------------------------
1 | public-hoist-pattern[]=*@nextui-org/*
2 | package-lock=false
3 |
--------------------------------------------------------------------------------
/ts/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Next UI
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/ts/Makefile:
--------------------------------------------------------------------------------
1 | # mode=grpcwebtext prevents client from receiving all the messages at once when using streaming
2 | .PHONY: build
3 |
4 | all: protoc disable-telemetry test build
5 |
6 | protoc:
7 | @echo "Generating protobuf files for ts"
8 | @if [ ! -d "./components/api" ]; then \
9 | mkdir ./components/api; \
10 | fi
11 | pnpm install -g protoc-gen-js protoc-gen-grpc-web
12 | protoc -I=../proto api.proto \
13 | --js_out=import_style=commonjs,binary:./components/api \
14 | --grpc-web_out=import_style=typescript,mode=grpcwebtext:./components/api
15 |
16 | build: install
17 | @echo "Building ts"
18 | pnpm build
19 |
20 | test: install
21 | @echo "Testing ts"
22 | pnpm test
23 |
24 | install:
25 | @echo "Installing dependencies for ts"
26 | pnpm install
27 |
28 | disable-telemetry:
29 | @echo "Disabling Next.js telemetry"
30 | npx next telemetry --disable
31 |
32 | analyze:
33 | ANALYZE=true pnpm build
34 |
35 | clean:
36 | @echo "Cleaning ts"
37 | rm -rf out
38 |
--------------------------------------------------------------------------------
/ts/README.md:
--------------------------------------------------------------------------------
1 | # Next.js & NextUI Template
2 |
3 | This is a template for creating applications using Next.js 14 (app directory) and NextUI (v2).
4 |
5 | [Try it on CodeSandbox](https://githubbox.com/nextui-org/next-app-template)
6 |
7 | ## Technologies Used
8 |
9 | - [Next.js 14](https://nextjs.org/docs/getting-started)
10 | - [NextUI v2](https://nextui.org/)
11 | - [Tailwind CSS](https://tailwindcss.com/)
12 | - [Tailwind Variants](https://tailwind-variants.org)
13 | - [TypeScript](https://www.typescriptlang.org/)
14 | - [Framer Motion](https://www.framer.com/motion/)
15 | - [next-themes](https://github.com/pacocoursey/next-themes)
16 |
17 | ## How to Use
18 |
19 | ### Use the template with create-next-app
20 |
21 | To create a new project based on this template using `create-next-app`, run the following command:
22 |
23 | ```bash
24 | npx create-next-app -e https://github.com/nextui-org/next-app-template
25 | ```
26 |
27 | ### Install dependencies
28 |
29 | You can use one of them `npm`, `yarn`, `pnpm`, `bun`, Example using `npm`:
30 |
31 | ```bash
32 | npm install
33 | ```
34 |
35 | ### Run the development server
36 |
37 | ```bash
38 | npm run dev
39 | ```
40 |
41 | ### Setup pnpm (optional)
42 |
43 | If you are using `pnpm`, you need to add the following code to your `.npmrc` file:
44 |
45 | ```bash
46 | public-hoist-pattern[]=*@nextui-org/*
47 | ```
48 |
49 | After modifying the `.npmrc` file, you need to run `pnpm install` again to ensure that the dependencies are installed correctly.
50 |
51 | ## License
52 |
53 | Licensed under the [MIT license](https://github.com/nextui-org/next-app-template/blob/main/LICENSE).
54 |
--------------------------------------------------------------------------------
/ts/app/about/layout.tsx:
--------------------------------------------------------------------------------
1 | export default function AboutLayout({ children }: { children: React.ReactNode }) {
2 | return (
3 |
Live pprof
22 |Smooth Chart Lines
28 |