Sloop - Kubernetes History Visualization

Overview

Sloop - Kubernetes History Visualization

Build Status Go Report Card Docker Pulls


Sloop monitors Kubernetes, recording histories of events and resource state changes and providing visualizations to aid in debugging past events.

Key features:

  1. Allows you to find and inspect resources that no longer exist (example: discover what host the pod from the previous deployment was using).
  2. Provides timeline displays that show rollouts of related resources in updates to Deployments, ReplicaSets, and StatefulSets.
  3. Helps debug transient and intermittent errors.
  4. Allows you to see changes over time in a Kubernetes application.
  5. Is a self-contained service with no dependencies on distributed storage.

Screenshots

Screenshot1

Architecture Overview

Architecture

Install

Sloop can be installed using any of these options:

Helm Chart

Users can install sloop by using helm chart now, for instructions refer helm readme

Precompiled Binaries

Build from Source

Building Sloop from source needs a working Go environment with version 1.13 or greater installed.

Clone the sloop repository and build using make:

mkdir -p $GOPATH/src/github.com/salesforce
cd $GOPATH/src/github.com/salesforce
git clone https://github.com/salesforce/sloop.git
cd sloop
go env -w GO111MODULE=auto
make
$GOPATH/bin/sloop

When complete, you should have a running Sloop version accessing the current context from your kubeConfig. Just point your browser at http://localhost:8080/

Other makefile targets:

  • docker: Builds a Docker image.
  • cover: Runs unit tests with code coverage.
  • generate: Updates genny templates for typed table classes.
  • protobuf: Generates protobuf code-gen.

Local Docker Run

To run from Docker you need to host mount your kubeconfig:

make docker-snapshot
docker run --rm -it -p 8080:8080 -v ~/.kube/:/kube/ -e KUBECONFIG=/kube/config sloop

In this mode, data is written to a memory-backed volume and is discarded after each run. To preserve the data, you can host-mount /data with something like -v /data/:/some_path_on_host/

Updating webfiles folder

To reflect any changes to webserver/webfiles, run the following command on terminal while within the webserver directory before submitting a pr:

go-bindata -pkg webserver -o bindata.go webfiles/

This will update the bindata folder with your changes to any html, css or javascript files within the directory.

Local Docker Run and connecting to EKS

This is very similar to above but abstracts running docker with AWS credentials for connecting to EKS

make docker
export AWS_ACCESS_KEY_ID=<access_key_id> AWS_SECRET_ACCESS_KEY=<secret_access_key> AWS_SESSION_TOKEN=<session_token>
./providers/aws/sloop_to_eks.sh <cluster name>

Data retention policy stated above still applies in this case.

Backup & Restore

This is an advanced feature. Use with caution.

To download a backup of the database, navigate to http://localhost:8080/data/backup

To restore from a backup, start sloop with the -restore-database-file flag set to the backup file downloaded in the previous step. When restoring, you may also wish to set the -disable-kube-watch=true flag to stop new writes from occurring and/or the -context flag to restore the database into a different context.

Memory Consumption

Sloop's memory usage can be managed by tweaking several options:

  • badger-use-lsm-only-options If this flag is set to true, values would be collocated with the LSM tree, with value log largely acting as a write-ahead log only. Recommended value for memory constrained environments: false
  • badger-keep-l0-in-memory When this flag is set to true, Level 0 tables are kept in memory. This leads to better performance in writes as well as compactions. Recommended value for memory constrained environments: false
  • badger-sync-writes When SyncWrites is true all writes are synced to disk. Setting this to false would achieve better performance, but may cause data loss in case of crash. Recommended value for memory constrained environments: false
  • badger-vlog-fileIO-mapping TableLoadingMode indicates which file loading mode should be used for the LSM tree data files. Setting to true would not load the value in memory map. Recommended value for memory constrained environments: true

Apart from these flags some other values can be tweaked to fit in the memory constraints. Following are some examples of setups.

  • Memory consumption max limit: 1GB
               // 0.5<<20 (524288 bytes = 0.5 Mb)               
               "badger-max-table-size=524288",
               "badger-number-of-compactors=1",
               "badger-number-of-level-zero-tables=1",
               "badger-number-of-zero-tables-stall=2",
  • Memory consumption max limit: 2GB
               // 16<<20 (16777216 bytes = 16 Mb)              
               "badger-max-table-size=16777216",
               "badger-number-of-compactors=1",
               "badger-number-of-level-zero-tables=1",
               "badger-number-of-zero-tables-stall=2",
  • Memory consumption max limit: 5GB
               // 32<<20 (33554432 bytes = 32 Mb)             
               "badger-max-table-size=33554432",
               "badger-number-of-compactors=1",
               "badger-number-of-level-zero-tables=2",
               "badger-number-of-zero-tables-stall=3",

Apart from the above settings, max-disk-mb and max-look-back can be tweaked according to input data and memory constraints.

Contributing

Refer to CONTRIBUTING.md

License

BSD 3-Clause

Issues
  • Excessive memory consumption?

    Excessive memory consumption?

    We are currently experimenting to use sloop.

    We find it very useful but we found out that it was very greedy regarding memory. After less than a full day, it is currently using 5Gb of memory :(

    Is it the normal behaviour?

    The last 3 hours sloop-last-3hours-2020 04 08-16_19_41

    The last 24 hours sloop-last-24hours-2020 04 08-16_20_06

    Here is our current configuration (no memory limits on purpose to see what's needed without being OOM killed)

    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: sloop
      labels:
        app.kubernetes.io/name: sloop
    spec:
      serviceName: sloop
      replicas: 1
      selector:
        matchLabels:
          app.kubernetes.io/name: sloop
      template:
        metadata:
          labels:
            app.kubernetes.io/name: sloop
        spec:
          containers:
            - args:
                - --config=/sloop-config/sloop.json
              command:
                - /sloop
              image: FIXME/sloop
              name: sloop
              ports:
                - containerPort: 8080
                  protocol: TCP
              livenessProbe:
                httpGet:
                  path: /healthz
                  port: 8080
                initialDelaySeconds: 30
                periodSeconds: 10
                timeoutSeconds: 5
                successThreshold: 1
                failureThreshold: 3
              readinessProbe:
                httpGet:
                  path: /healthz
                  port: 8080
                initialDelaySeconds: 5
                periodSeconds: 10
                timeoutSeconds: 5
                successThreshold: 1
                failureThreshold: 3
              resources:
                limits: {}
                requests:
                  memory: 1.5Gi
                  cpu: 50m
              volumeMounts:
                - mountPath: /data
                  name: sloop-data
                - mountPath: /sloop-config
                  name: sloop-config
                - mountPath: /tmp
                  name: sloop-tmp
              securityContext:
                allowPrivilegeEscalation: false
                privileged: false
                runAsNonRoot: true
                runAsUser: 100
                runAsGroup: 1000
                readOnlyRootFilesystem: true
          securityContext:
            fsGroup: 1000
          volumes:
            - name: sloop-config
              configMap:
                name: sloop-config
            - name: sloop-tmp
              emptyDir:
                sizeLimit: 100Mi
          serviceAccountName: sloop
          terminationGracePeriodSeconds: 10
      volumeClaimTemplates:
        - metadata:
            name: sloop-data
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 10Gi
    
    opened by looztra 14
  • Remove selectedEndTime.max

    Remove selectedEndTime.max

    As submitted in https://github.com/salesforce/sloop/issues/194 and https://github.com/salesforce/sloop/issues/167, users are running into issues with the max end time. I ran into this too and it makes the app unusable. I looked into this, and there are three issues:

    • iso is adjusted from utcNow, but then calling toISOString(), so essentially double offset
    • the elem.max is only set on $(document).ready, which means if a user presses the "Now" button, it ends up after the max
    • elem.value is set twice

    I started to fix these, but stepping back, I don't understand why we need a max at all. It really should be just "now" when the server accepts the request, not when the page first (or even subsequently) loaded on the client side. As such, this drops the setting of elem.max. It also cleaned up the unused vars and the double setting of elem.value.

    Fixes https://github.com/salesforce/sloop/issues/167 Fixes https://github.com/salesforce/sloop/issues/194 cc: @mengyaoyang11

    cla:signed 
    opened by ryanbrainard 9
  • Home button in debug menu

    Home button in debug menu

    Home button on the debug menu does not return to home page.

    Fix: Change the way the href in the home button is generated. Made changes in all references to the home button in other pages.

    cla:missing 
    opened by annelausf 6
  • Make the Helm chart compatible with new Kubernetes API

    Make the Helm chart compatible with new Kubernetes API

    In the issue #195 I mentioned that the Ingress manifest within the Helm chart has to be updated to be compatible with a modern Kubernetes API.

    This PR does that, including some other fixes:

    • Use new RBAC API version
    • Added ingressClassName option to the chart
    cla:missing 
    opened by triqster 5
  • Failed to list resources on startup in k8s 1.16+

    Failed to list resources on startup in k8s 1.16+

    When connecting to k8s cluster with version 1.16 or higher receiving a lot of errors like this: E0415 12:30:41.601909 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource E0415 12:30:41.672392 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource E0415 12:30:42.712250 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource E0415 12:30:42.795160 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource E0415 12:30:43.806459 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource E0415 12:30:43.890617 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource E0415 12:30:45.067983 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource E0415 12:30:45.252900 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource E0415 12:30:46.359063 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource E0415 12:30:46.368595 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource E0415 12:30:47.640136 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource E0415 12:30:47.668593 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource

    If I connect to k8s 1.15 there is no such errors. I think it`s related to this https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/

    I tried to make changes to api version kubewatcher.go:

    i.informerFactory.Apps().V1().DaemonSets().Informer().AddEventHandler(i.getEventHandlerForResource("DaemonSet")) i.informerFactory.Apps().V1().ReplicaSets().Informer().AddEventHandler(i.getEventHandlerForResource("ReplicaSet"))

    but still, have these errors. I can't find any use of beta APIs in other go files, but I`m not a go programmer.

    Any help?

    opened by DarthSlider 5
  • Badger Compaction Issue

    Badger Compaction Issue

    Hi, there's an issue with Sloop that occurs when you consume all of maxDiskDb and a compaction runs, the sloop graphs disappear (and subsequent writes aren't made to the DB).

    I'm able to consistently reproduce this by installing the latest helm chart without any overrides, except adding --max-disk-mb=1 to the command line.

    It seems to occur after these events:

    I1211 01:51:02.648860       1 storemanager.go:171] Start cleaning up because current file size: 14073983 exceeds file size: 1048576
    badger 2019/12/11 01:51:02 INFO: Writes flushed. Stopping compactions now...
    badger 2019/12/11 01:51:02 DEBUG: Flushing memtable
    badger 2019/12/11 01:51:02 DEBUG: Storing value log head: {Fid:0 Len:32 Offset:13236655}
    badger 2019/12/11 01:51:02 INFO: Got compaction priority: {level:0 score:1.74 dropPrefix:[47 119 97 116 99 104 47 48 48 49 53 55 54 48 50 54 48 48 48]}
    badger 2019/12/11 01:51:02 INFO: Running for level: 0
    badger 2019/12/11 01:51:02 DEBUG: LOG Compact. Added 212 keys. Skipped 114 keys. Iteration took: 466.315µs
    badger 2019/12/11 01:51:02 DEBUG: Discard stats: map[0:205537]
    badger 2019/12/11 01:51:02 INFO: LOG Compact 0->1, del 2 tables, add 1 tables, took 11.140577ms
    badger 2019/12/11 01:51:02 INFO: Compaction for level: 0 DONE
    badger 2019/12/11 01:51:02 DEBUG: LOG Compact. Added 205 keys. Skipped 7 keys. Iteration took: 444.281µs
    badger 2019/12/11 01:51:02 DEBUG: Discard stats: map[0:7658]
    badger 2019/12/11 01:51:02 INFO: LOG Compact 1->1, del 1 tables, add 1 tables, took 10.030778ms
    badger 2019/12/11 01:51:02 INFO: DropPrefix done
    badger 2019/12/11 01:51:02 INFO: Resuming writes
    badger 2019/12/11 01:51:02 INFO: Writes flushed. Stopping compactions now...
    badger 2019/12/11 01:51:02 DEBUG: LOG Compact. Added 201 keys. Skipped 4 keys. Iteration took: 261.251µs
    badger 2019/12/11 01:51:02 DEBUG: Discard stats: map[0:582]
    badger 2019/12/11 01:51:02 INFO: LOG Compact 1->1, del 1 tables, add 1 tables, took 8.278415ms
    badger 2019/12/11 01:51:02 INFO: DropPrefix done
    badger 2019/12/11 01:51:02 INFO: Resuming writes
    badger 2019/12/11 01:51:02 INFO: Writes flushed. Stopping compactions now...
    badger 2019/12/11 01:51:02 DEBUG: LOG Compact. Added 201 keys. Skipped 0 keys. Iteration took: 277.819µs
    badger 2019/12/11 01:51:02 DEBUG: Discard stats: map[]
    badger 2019/12/11 01:51:02 INFO: LOG Compact 1->1, del 1 tables, add 1 tables, took 12.260061ms
    badger 2019/12/11 01:51:02 INFO: DropPrefix done
    badger 2019/12/11 01:51:02 INFO: Resuming writes
    

    image

    bug 
    opened by acaire 5
  • Changed payload ticks to be more visible

    Changed payload ticks to be more visible

    Payload changes were displayed by red and black ticks that were not that visible and had no explanation on them. Fix: Changed the black ticks to white ticks to increase visibility. Added a hover over so that there is information on what the ticks represent. Added a toggle to turn off payload change information.

    Before: Screen Shot 2021-09-28 at 4 37 13 PM

    After: Screen Shot 2021-09-28 at 4 37 55 PM

    opened by annelausf 4
  • Error in initializing K8s client: no Auth Provider found for name

    Error in initializing K8s client: no Auth Provider found for name "azure"

    Hi,

    I am getting the below error when trying to run sloop in a docker container

    kubeclient.go:42] Creating k8sclient with user-defined config masterURL=, kubeContext=*****.
    mysloop_1  | E0525 17:05:16.909310       1 kubeclient.go:53] Cannot Initialize Kubernetes Client API: no Auth Provider found for name "azure"
    mysloop_1  | I0525 17:05:16.910185       1 store.go:112] Closing store
    mysloop_1  | badger 2021/05/25 17:05:16 INFO: Got compaction priority: {level:0 score:1.73 dropPrefix:[]}
    mysloop_1  | I0525 17:05:16.918293       1 store.go:114] Finished closing store
    mysloop_1  | E0525 17:05:16.934304       1 main.go:31] Main exited with error: failed to create kubernetes client: no Auth Provider found for name "azure"
    
    

    Looks like https://github.com/salesforce/sloop/blob/master/pkg/sloop/ingress/kubeclient.go does not import the azure auth plugin as mentioned in https://github.com/liggitt/kubernetes/blob/master/staging/src/k8s.io/client-go/examples/README.md#auth-plugins

    import _ "k8s.io/client-go/plugin/pkg/client/auth/azure"

    opened by sumitjainn 4
  • Fix end time

    Fix end time

    With current master the "Details" view on selecting a resource was broken, with errors in the server log about missing "endtime" param ... as the golang code is using end_time in https://github.com/salesforce/sloop/blob/14ae23c068c64c25ccaa586d4e6bfff728bda846/pkg/sloop/webserver/resourcehandler.go#L86-L90

    Hope you don't mind @mengyaoyang11 @sana-jawad but I'm reverting #151 to keep the "xxx_time" variables all in the same style with each other, and updated what I hope is one bit of JS code that uses it.

    Also updated the Readme to include a better form of go-bindata command which is needed to keep the package name webserver without manual fixup, at least with the v3.1.2 I have...

    cla:signed 
    opened by tyrken 4
  • Add helm options for config, pullPolicy and apiGroups

    Add helm options for config, pullPolicy and apiGroups

    I had to make some changes to the helm chart to get it usable in our cluster, including control over the bits needed from the external values file.

    Note I had to define a non-empty displayContext also, to avoid getting stuck in a redirect loop, not sure if this a bug or not.

    Sorry my auto-formatting editor has put in a bunch of whitespace fixups, hope you don't mind them included...

    cla:signed 
    opened by tyrken 4
  • Sloop Releases Request

    Sloop Releases Request

    Hi, any chance you could please use releases and subsequently immutable style versioning for docker tags? I'd like to be able to pin my Sloop deployments rather than using latest.

    I'm happy to submit a PR for this but would need some direction in the implementation as it requires buy-in from your side.

    opened by acaire 3
  • Template missing

    Template missing

    An error is reported when compiling after "go-bindata -pkg webserver -o bindata.go webfiles/"

    error message:

    github.com/salesforce/sloop/pkg/sloop/webserver

    pkg/sloop/webserver/debug.go:99:70: undefined: _webfilesDebugviewkeyHtml pkg/sloop/webserver/debug.go:205:72: undefined: _webfilesDebuglistkeysHtml pkg/sloop/webserver/debug.go:346:66: undefined: _webfilesDebughistogramHtml pkg/sloop/webserver/debug.go:361:68: undefined: _webfilesDebugconfigHtml pkg/sloop/webserver/debug.go:376:56: undefined: _webfilesDebugHtml pkg/sloop/webserver/debug.go:401:80: undefined: _webfilesDebugtablesHtml pkg/sloop/webserver/indexhandler.go:24:56: undefined: _webfilesIndexHtml pkg/sloop/webserver/resourcehandler.go:58:62: undefined: _webfilesResourceHtml make: *** [all] Error 2

    opened by zillaer 1
  • empty output

    empty output

    trying to test it locally and cound't get any info from the cluster, looking at the logs I see a lot of:

    E0509 14:30:51.422486       1 events.go:93] Could not parse first timestamp 
    E0509 14:30:51.422536       1 events.go:99] Could not parse last timestamp 
    

    k8s v1.20.7

    docker: sloopimage/sloop: sha256:0ef22386a7683958d3adc83d19b5e79091b4f65e4c96ceb4797d93faa66c32ce

                "Labels": {
                    "org.opencontainers.image.created": "2021-08-10T21:33:34Z",
                    "org.opencontainers.image.name": "sloop",
                    "org.opencontainers.image.revision": "f477bfe46c9622a81d18f3f96fdee949a82e4852",
                    "org.opencontainers.image.version": "1.2"
                }
    
    opened by nvtkaszpir 0
  • Relax probing for forbidden resources

    Relax probing for forbidden resources

    Useing latest sloop on a 1.20.x cluster

    In the log it seems that sloop continues to query for resources that it doesn't have access to

    IMHO, when sloop has detected a forbidden - it should mark that resourcetype as not accessible and back off (it could then perhaps retry at a later point eg every CrdRefreshInterval * 4 )

    E0328 10:40:10.785774 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108: Failed to list *unstructured.Unstructured: servicemonitors.monitoring.coreos.com is forbidden: User "system:serviceaccount:sloop:sloop" cannot list resource "servicemonitors" in API group "monitoring.coreos.com" at the cluster scope I0328 10:40:10.986713 1 trace.go:116] Trace[320645588]: "Reflector ListAndWatch" name:pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:108 (started: 2022-03-28 10:39:58.587890641 +0000 UTC m=+1821.020996664) (total time: 12.398775147s):

    $kubectl logs --since=30m -n sloop sloop-0 | grep servicemonitors | wc -l 134 so it queries for the same forbidden resource type aproximately 4.47 times pr minute

    opened by hoerup 1
Owner
Salesforce
A variety of vendor agnostic projects which power Salesforce
Salesforce
gosivy - Another visualization tool for Go process metrics

gosivy Another visualization tool for Go process metrics. Gosivy tracks Go process's metrics and plot their evolution over time right into your termin

Ryo Nakao 442 Jun 16, 2022
🚀Statsview is a real-time Golang runtime stats visualization profiler

Statsview is a real-time Golang runtime stats visualization profiler. It is built top on another open-source project, go-echarts, which helps statsview to show its graphs on the browser.

go-echarts 486 Jun 26, 2022
Interactive Terraform visualization. State and configuration explorer.

Rover - Terraform Visualizer Rover is a Terraform visualizer. In order to do this, Rover: generates a plan file and parses the configuration in the ro

Tu Nguyen 2k Jun 30, 2022
entviz is an ent extension that provides visualization of the schema graph

entviz entviz is an ent extension that creates visual graph (html file) of your ent's schema. install go get github.com/hedwigz/entviz add this exten

Amit Shani 73 Jun 26, 2022
Interactive dependency graph visualization tool for golang

Interactive dependency graph visualization tool for golang using the awesome cytoscape graph visualizer.

Armin Becher 5 Nov 1, 2021
Data visualization with chart, Create CSV file, Read Write CSV file

Data visualization with chart, Create CSV file, Read Write CSV file, Read from json file and many more in single project ......

MD FAISAL PORAG 1 Jan 13, 2022
Good enough Kubernetes namespace visualization tool

Kubesurveyor Good enough Kubernetes namespace visualization tool. No provisioning to a cluster required, only Kubernetes API is scrapped. Installation

Peter Gasper 77 Jun 20, 2022
Pure Go line editor with history, inspired by linenoise

Liner Liner is a command line editor with history. It was inspired by linenoise; everything Unix-like is a VT100 (or is trying very hard to be). If yo

Peter Harris 899 Jun 16, 2022
Decrypt passwords/cookies/history/bookmarks from the browser.

hack-browser-data is an open-source tool that could help you decrypt data ( passwords|bookmarks|cookies|history ) from the browser. It supports the most popular browsers on the market and runs on Windows, macOS and Linux.

ᴍᴏᴏɴD4ʀᴋ 4.8k Jun 29, 2022
Pi-hole data right from your terminal. Live updating view, query history extraction and more!

Pi-CLI Pi-CLI is a command line program used to view data from a Pi-Hole instance directly in your terminal.

Reece Mercer 41 Apr 26, 2022
Create changelogs for Helm Charts, based on git history

helm-changelog Create changelogs for Helm Charts, based on git history. The application depends on the assumption that the helm chart is released on t

Frederik Mogensen 35 Jun 3, 2022
Integrated console application library, using Go structs as commands, with menus, completions, hints, history, Vim mode, $EDITOR usage, and more ...

Gonsole - Integrated Console Application library This package rests on a readline console library, (giving advanced completion, hint, input and histor

null 17 Apr 3, 2022
A sample FaaS function that gets a stock quote and 30 day history by symbol and returns a HTML page with a generates SVG sparkline.

faas stonks This uses serverless technology to get a stock quote and 30 day sparkline from Yahoo Finance. Deployment Nimbella account Namespace with o

Jon Friesen 2 Sep 23, 2021
Shows your recent browser history in tree style. 树状展示浏览器历史 (For Edge / Chromium / Chrome)

Tree Style Histyle This extension shows your recent browser history in tree style. When you browser pages from internet, you always jump from one page

null 122 Jun 20, 2022
Create new commands from your shell history or terminal.

overdub Create new commands from your shell history or terminal. TODO list for initial release Filter out unlikely commands (e.g. package managers) fr

Michael Zalimeni 5 Oct 14, 2021
🏗️ Fetch a specific commit without any history (shallow depth w/o cloning)

shallow-fetch-sha ??️ For a given git repository and commit, fetch and checkout just that commit without any history. This can be extremely useful in

Rob Herley 0 Nov 27, 2021
Check the report history of any IP address to see if anyone else has reported malicious activities using API

abuseip Check the report history of any IP address to see if anyone else has reported malicious activities using API by abuseipdb.com. Installation $

Akbar Kustirama 2 Nov 13, 2021
Pure Go command line prompt with history, kill-ring, and tab completion

Prompt Prompt is a command line prompt editor with history, kill-ring, and tab completion. It was inspired by linenoise and derivatives which eschew u

Peter Mattis 1 Nov 20, 2021
Download your Fitbit weight history and connect to InfluxDB and Grafana

WemonFit Weight monitoring for Fitbit, using InfluxDB and Grafana Generating a new certificate openssl req -new -newkey rsa:2048 -nodes -keyout lo

Eduardo Argollo 0 Dec 5, 2021
A simple CLI tool that outputs the history of connections to Amazon EC2 instances using AWS Session Manager.

ssmh This is a simple CLI tool that outputs the history of connections to Amazon EC2 instances using AWS Session Manager. Installation brew install mi

Yoshihiro Ito 0 Dec 10, 2021
Show star history of repositories

gh-star-history Show star history of repositories. ⭐ Usage $ gh star-history --owner cli --repo cli --per-month Aggregate stars of cli/cli ... 2019-10

Ken’ichiro Oyama 5 May 12, 2022
Proof of History in Golang. Taking key concepts from the Solana whitepaper and providing examples in Go

Proof of History - Concepts in Go ________ ________ ___ ___ |\ __ \|\ __ \|\ \|\ \ \ \ \|\ \ \ \|\ \ \ \\\ \

Ben Duncan 6 May 27, 2022
Client Implementation of eosio state-history websocket.

Client Implementation of eosio state-history websocket.

Sw/eden Golang 0 Jan 13, 2022
Fishfindr - An application that is being developed to help me figure out the best places to fish based on my catch history

fishfindr Fishfindr is an application that is being developed to help me figure out the best places to fish based on my catch history. The front-end p

Jake Correnti 2 Feb 10, 2022
Automatic sync from IMDb to Trakt (watchlist, lists, ratings and history) using GitHub actions

imdb-trakt-sync GoLang app that can sync IMDb and Trakt user data - watchlist, ratings and lists. For its data needs, the app is communicating with th

Tsvetoslav Dimov 6 May 26, 2022
Alfred workfow for search safari history.

Alfred Safari Toolkit This is an Alfred workflow for Safari. I have been using tupton/alfred-safari-history for years, but it runs with Python2 which

Addo.Zhang 10 Jun 15, 2022
A Go dependency graph visualization tool

godepgraph godepgraph is a program for generating a dependency graph of Go packages. Install go get github.com/kisielk/godepgraph Use For basic usage

Kamil Kisiel 735 Jun 16, 2022
:rocket: Instant live visualization of your Go application runtime statistics (GC, MemStats, etc.) in the browser

Statsviz Instant live visualization of your Go application runtime statistics (GC, MemStats, etc.). Import "github.com/arl/statsviz" Register statsviz

Aurélien Rainone 1.8k Jun 22, 2022
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

The open-source platform for monitoring and observability. Grafana allows you to query, visualize, alert on and understand your metrics no matter wher

Grafana Labs 49.7k Jun 27, 2022