about summary refs log tree commit diff
path: root/tools (follow)
Commit message (Collapse)AuthorAgeFilesLines
* feat(tools/sendsms): build sendsms with nix via naerskFranck Cuny2022-09-073-4/+23
| | | | | | | I can now run `nix build .#tools.sendsms` to build the tool, or get it deployed on a machine. Change-Id: I82c733be466adb229d98414fd1229e05f355dd7d
* feat(tool/sendsms): a CLI to send SMSFranck Cuny2022-09-076-0/+1382
| | | | | | | | | | | This is a new tool to send SMS via Twilio's API. For now it supports a single subcommand: reboot. Using that subcommand, a SMS will be send with the name of the host and the IP address for the defined network interface. This is useful to be notified when one of my machine reboot, and what's the IP for the main interface (this is useful since my ISP does not provide a static IP). Change-Id: I5886a2c77ebd344ab3befa51a6bdd3d65bcc85d4
* fix(fmt): apply gofmt on some filesFranck Cuny2022-08-151-2/+1
| | | | | | | Change-Id: I9d1ff1b7de5cb89ffcf40bc91e794f7ff420c1e8 Reviewed-on: https://cl.fcuny.net/c/world/+/717 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(tools): add gerrit-hook to the list of toolsFranck Cuny2022-08-061-0/+2
| | | | | | | Change-Id: I9bf0524ec12c4d554fc4c7ded458aab8a9cf5ef6 Reviewed-on: https://cl.fcuny.net/c/world/+/702 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* ref(tools): simplify the import of toolsFranck Cuny2022-08-065-12/+13
| | | | | | | | | | | In the `mkSystem` function, instead of defining each tools, let's import all of them at once. This works both with installing a tool from a module or running them from the CLI. Change-Id: Ia44ff9a45b54a1ecea6f6b02b4cad2956799f627 Reviewed-on: https://cl.fcuny.net/c/world/+/682 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(new-lines): add or remove new lines where neededFranck Cuny2022-07-022-2/+0
| | | | | | | | | | | The pre-commit hook for new lines reported and correct a number of issues, so let's commit them now and after that we ca enable the hook for the repository. Change-Id: I5bb882d3c2cca870ef94301303f029acfb308740 Reviewed-on: https://cl.fcuny.net/c/world/+/592 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* ref(tools): top level module to manage all the toolsFranck Cuny2022-06-281-0/+10
| | | | | | | | | | Don't make it harder to maintain the flake.nix, just add the tools to this module and import it in the flake configuration. Change-Id: I62237b996b1c8319c48b9ca4a80e7a3062ef92ec Reviewed-on: https://cl.fcuny.net/c/world/+/588 Reviewed-by: Franck Cuny <franck@fcuny.net> Tested-by: CI
* fix(tools/gerrit-hook): exit on errorFranck Cuny2022-06-261-0/+1
| | | | | | | Change-Id: Ia09983533b3527e50eb4c0828d675e72a782c146 Reviewed-on: https://cl.fcuny.net/c/world/+/581 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(tools/gerrit-hook): replace `.' with `-dot-' in project's nameFranck Cuny2022-06-261-0/+5
| | | | | | | | | | | | If the name of the project has a `.' in it's name (for example `Emacs.d'), buildKite automatically replace it with `-dot'. Which means that we also have to do this conversion here otherwise we're trying to build against a pipeline that does not exists. Change-Id: I54a7dce40da854f125ff43bfbd252b0cd5bfcb29 Reviewed-on: https://cl.fcuny.net/c/world/+/561 Reviewed-by: Franck Cuny <franck@fcuny.net> Tested-by: CI
* feat(tools/gerrit-hook): run CI pipeline for all the repositoriesFranck Cuny2022-06-261-3/+3
| | | | | | | Change-Id: Ib0e376366ea684a254b7993a746e082e38849daa Reviewed-on: https://cl.fcuny.net/c/world/+/521 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* ref(tools/gerrit-hook): more idiomatic codeFranck Cuny2022-06-231-3/+4
| | | | | | | | | As reported by the linter. Change-Id: I649fc3d90387bda28efe025dd7ccb54d4296d1bd Reviewed-on: https://cl.fcuny.net/c/world/+/469 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(tools/ipconverter): add missing new lines to print statementsFranck Cuny2022-06-201-4/+4
| | | | | | | Change-Id: I2dffe70dae5ef287c49d3504f9db438661adc16b Reviewed-on: https://cl.fcuny.net/c/world/+/465 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(tools/ipconverter): fail if number of arguments is insufficientFranck Cuny2022-06-201-0/+5
| | | | | | | Change-Id: Ifa382713e3f7cf2360b58d6c05a8a200258921f2 Reviewed-on: https://cl.fcuny.net/c/world/+/464 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/seqstat): add a tool to report stats about a sequenceFranck Cuny2022-06-194-0/+194
| | | | | | | | | | | | | | | | | | | | | For example: ``` % echo 1 20 12 32 19 2 | ./seqstat -S ▁▅▃█▅▁ min: 1.000000 max: 32.000000 avg: 14.333333 p50: 19.000000 p90: 32.000000 p99: 32.000000 p999: 32.000000 ordered sequence: [1 2 12 19 20 32] ``` Change-Id: I9303bd7d0e964948143e77c868de8777cd7a9951 Reviewed-on: https://cl.fcuny.net/c/world/+/454 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/numap): add a tool to report NUMA topology of a hostFranck Cuny2022-06-197-0/+512
| | | | | | | | | | | | The tool maps the various PCI devices to the NUMA node they are attached to and print the result to STDOUT in JSON. Only ethernet, NVMe and GPU devices are accounted for at the moment. Change-Id: If32c805e61211f0ef4838a82eabc70d7fc1985fe Reviewed-on: https://cl.fcuny.net/c/world/+/453 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/schedlatency): add a tool to report scheduler latencyFranck Cuny2022-06-192-0/+258
| | | | | | | | | Given a PID, the tool reports the scheduler latency for it. Change-Id: I52e1de81a91f53ac74734dfd808fd4d7ac00c685 Reviewed-on: https://cl.fcuny.net/c/world/+/452 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/scheddomain): add a tool to report on scheduler domainsFranck Cuny2022-06-192-0/+156
| | | | | | | Change-Id: Ia4e1aa1e7fc48b8bfb619aba9ba71037ffcc69f8 Reviewed-on: https://cl.fcuny.net/c/world/+/451 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/git-bootstrap): initialize a git repository with my defaultsFranck Cuny2022-06-184-0/+250
| | | | | | | | | | This tool can be used to create a new git repository. It will create a README, add the license file, and a few other things I expect. Change-Id: I14123c8f5b7e2d23373a505a146d2c9f6c08615e Reviewed-on: https://cl.fcuny.net/c/world/+/450 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/ssh-key-to-forge): import a SSH key to a forgeFranck Cuny2022-06-184-0/+591
| | | | | | | | | | This can be useful if I need to import a SSH key to one of the forge (only GitHub is supported for now). Change-Id: Ieb5143a670cd75f1fbe51c0f3ae763dd1d667bef Reviewed-on: https://cl.fcuny.net/c/world/+/449 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/music-organizer): add a CLI to organize my musicFranck Cuny2022-06-185-0/+318
| | | | | | | | | | This CLI can be used on the NAS to import an album in my music collection. Change-Id: I5749e34b55bead846e9341fca29e648d3859fc8f Reviewed-on: https://cl.fcuny.net/c/world/+/448 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(tools/git-blame-stats): add a CLI to report git blame statisticsFranck Cuny2022-06-183-0/+104
| | | | | | | | | | | Running this command in a repository will report how many lines in the current paths were created by different author, for a given revision. If no revision is specific, HEAD is assumed. Change-Id: I3fbed4f35a05e12fef22a72d7231727c05c50c96 Reviewed-on: https://cl.fcuny.net/c/world/+/445 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(ipconverter): add a tool to convert IPv4 to int and vice-versaFranck Cuny2022-06-184-0/+120
| | | | | | | | | | | | | | | | | It's sometimes useful to store IPv4 addresses as an integer. This tool helps with the conversion, and also does the reverse conversion. ``` % go run . int2ip 3232235521 3232235521 192.168.0.1 % go run . ip2int 192.168.0.1 192.168.0.1 3232235521 ``` Change-Id: Ic1e44057bca3539b4c183d387c635f69f5bf3f36 Reviewed-on: https://cl.fcuny.net/c/world/+/441 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* docs(tools/govanity): update instructionsFranck Cuny2022-06-151-5/+1
| | | | | | | Change-Id: I212635346d2244d9aa1648d02391d192f33c8a1f Reviewed-on: https://cl.fcuny.net/c/world/+/423 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* ref(tools/govanity): simplify the deployment scriptFranck Cuny2022-06-152-13/+11
| | | | | | | | | | No need for an external script, there's only a need to run the tests and deploy with `flyctl`. Change-Id: I05400f6b813573b26af884d784fe407d4435429f Reviewed-on: https://cl.fcuny.net/c/world/+/421 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* ref(tools/govanity): add a function to load the configurationFranck Cuny2022-06-152-18/+22
| | | | | | | Change-Id: I36c6da7eba64e6f877d1a17c700c56a70434625a Reviewed-on: https://cl.fcuny.net/c/world/+/422 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(tools/govanity): add a test for the repo URLFranck Cuny2022-06-151-0/+40
| | | | | | | | | | | | | | | | | This test does an HTTP request to ensure the URL for the repository does not return an error. The test tries first to do a DNS resolution to see if we have network access. When we build the binary in the nix sandbox we don't have network access, so we don't want to fail in this situation, we only want to skip. The test is going to be run before we do a deployment. Change-Id: I184f9208210432a5394158d728e556c949e63a24 Reviewed-on: https://cl.fcuny.net/c/world/+/419 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(tools/govanity): remove one repo and fix URL for the other twoFranck Cuny2022-06-151-4/+2
| | | | | | | Change-Id: Id8ad45afc710e1bc5fef5704deb9d8b4c7559b4b Reviewed-on: https://cl.fcuny.net/c/world/+/418 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* mpd: we only want events from the player subsystemFranck Cuny2022-06-112-2/+8
| | | | | Store the name of the subsystem in a constant, add some comments on where to find the list.
* doc: update README with instruction for installingFranck Cuny2022-06-111-0/+8
|
* build: install the binary and systemd unitFranck Cuny2022-06-111-0/+12
| | | | | | Add a Makefile to install the binary in GOPATH and the unit file for the service. When the binary is installed, systemd is reloaded and the service is also started.
* scrobbler: add a systemd unit fileFranck Cuny2022-06-111-0/+43
| | | | | | | | | | | | As I want the scrobbler to be started automatically when I log into my session, the easiest way to do this is by having a systemd unit file that I run for my own user. The unit expects that the binary for the scrobbler is under my $GOPATH, which is hard coded for now. We also ensure that the binary exists before starting the unit. We harness the service with a number of directives.
* scrobbler: read mpd status before processing songFranck Cuny2022-06-111-4/+21
| | | | | | | | If the status of the player is "stop", we don't have a new song to handle. In this case, if there's a current song, let's update the status and clear our state. Closes #1.
* scrobbler: record how long a song was playedFranck Cuny2022-06-112-1/+16
| | | | | | | | Add a column `playtime` to the records table to keep track of how long a song was played. With this information, in the future, we will be able to sum up how long we listen to music, but also which songs were skipped.
* mpd-scrobbler: proper default argumentsFranck Cuny2022-06-111-2/+31
| | | | | | | | The program needs two arguments: the mpd host and port, which can be passed as flags (default is to use the local instance of mpd). We store the database in `XDG_CONFIG_HOME/mpd-scrobbler`, and we create the path if needed.
* scrobbler: use helper function EqualAttrsFranck Cuny2022-06-111-3/+1
| | | | | | To compare the current attributes with the current record, we can use the helper `EqualAttrs` which will tell us if we need to create a new record or not.
* record: add some basic testingFranck Cuny2022-06-112-0/+59
|
* mpd-stats: pass database path to the scrobblerFranck Cuny2022-06-112-5/+31
| | | | | | | | When creating a scrobbler, we provide the path to the database. The scrobbler then get a handler to the database. When a new record is created, we persist it to the database using the `save` function.
* scrobbler: add timestamp to the recordFranck Cuny2022-06-111-9/+11
| | | | When we create a new record, let's capture when this was created.
* scrobbler: add interface to the sqlite3 databaseFranck Cuny2022-06-113-0/+57
| | | | | | | | | We want to persist the records in a database, so we can extract statistics and an history. The module for the database is straightforward: it opens the database if it exists and return an handler to it. If the database does not exists, we create it and we create the only table we need (records).
* mpd-stats: create and run the scrobblerFranck Cuny2022-06-111-39/+4
|
* scrobbler: add functions to create and run itFranck Cuny2022-06-111-0/+66
| | | | | | | | | | | | Add a new function to create a scrobbler. The function takes care of creating the mpd client. Add a function to run the scrobbler, which takes care of creating a new record when needed. This will simplify the interface for the caller, as all they really care about is: create the scrobbler, close it when we're done, and collect songs information while we listen to our music.
* mpd: export the type PlayerFranck Cuny2022-06-111-4/+4
|
* mpd: add function `Close` to the playerFranck Cuny2022-06-112-2/+15
| | | | | Let's close both the watcher and the client, instead of leaking this interface to the user.
* mpd: rename function to create the playerFranck Cuny2022-06-112-2/+2
|
* scrobbler: create a record on new songFranck Cuny2022-06-111-5/+27
| | | | | | When we receive an event from the player, we look if the song is different from the previous one, and we create a new record if that's the case. If the song is similar, there's nothing to do.
* scrobbler: initial log record typeFranck Cuny2022-06-113-1/+40
| | | | | Define the type for a log record and add an helper function to create a new record.
* scrobbler: watch for events and print song detailsFranck Cuny2022-06-114-0/+77
| | | | | | | | | | We create a module "mpd" to interact with our MPD instance. For now we only have a single function to create a new client, which creates an actual client for mpd (and we ping the instance every 30 seconds), and a watcher to receive new events. The tool "scrobbler" then wait for new events and display songs information.
* README: add some information about loggingFranck Cuny2022-06-111-1/+14
| | | | Describe what is being collected.
* add initial go.modFranck Cuny2022-06-111-0/+3
|
* Add README.org, LICENSE.txtFranck Cuny2022-06-112-0/+21
|
* ref(drone): remove all modules and configurationsFranck Cuny2022-06-111-1/+0
| | | | | | | | | I do not use drone anymore, no need to keep this around. Change-Id: I8f9564747939a6d1a2b95bcfe8e2c70e46d8bc1e Reviewed-on: https://cl.fcuny.net/c/world/+/411 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* fix(scripts): no need to create tags when deploying to fly.ioFranck Cuny2022-06-101-7/+1
| | | | | | | | | | | | | I don't need tags in this repository. There's no need to create them after a deploy. Before stopping the fly.io agent, checks that we're in the CI environment. Change-Id: I6208b70023c6ae74d58e535e24b44221956dbe63 Reviewed-on: https://cl.fcuny.net/c/world/+/408 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(gerrit-hook): propagate gerrit information in the environmentFranck Cuny2022-06-091-3/+17
| | | | | | | | | The buildKite agents need this information in order to vote after a build. Change-Id: If03ba51d55f4d1155c6b7fdadace3b4643480258 Reviewed-on: https://cl.fcuny.net/c/world/+/342 Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(gerrit): update CL when buildKite build is finishedFranck Cuny2022-06-092-0/+46
| | | | | | | | | | | | | | | buildKite can call specific hooks at various stages ([1]). We add a hook to run after each command. For now we only care if the label of the command is `:hammer:', since this is what we've defined for our pipeline. After a successful build, the agent will post a review with +1 if it's a success, or -1 if the build results in failure. [1] https://buildkite.com/docs/agent/v3/hooks#job-lifecycle-hooks Change-Id: I6b2b886c13e6f23ddbc96fd3e865f0d50d625446 Reviewed-on: https://cl.fcuny.net/c/world/+/305 Reviewed-by: Franck Cuny <franck@fcuny.net>
* doc(gerrit-hook): add initial documentationFranck Cuny2022-06-041-0/+12
| | | | | | Change-Id: Id9da12e3a42d42d67cb9962b1ad0b7d27e860663 Reviewed-on: https://cl.fcuny.net/c/world/+/201 Reviewed-by: Franck Cuny <franck@fcuny.net>
* feat(gerrit-hook): a small tool to act as a dispatcher for gerritFranck Cuny2022-06-045-0/+308
| | | | | | | | | | | | | | | | When a patchset is created, gerrit will call this tool with a number of arguments. This hook triggers a build with buildKite for the given patchset, and add a comment to gerrit with a link to the build. We do not wait for the build to be successful to update gerrit. This will be done by another hook which the buildKite agents will call once they are done with the build. Change-Id: Iaa221765f3c52875ec37c5d282ba0557291eb5a4 Reviewed-on: https://cl.fcuny.net/c/world/+/171 Reviewed-by: Franck Cuny <franck@fcuny.net>
* tools(govanity): add the tool to flake.nixFranck Cuny2022-05-291-0/+24
| | | | Change-Id: Ib2792fa8c3f861d290f2495a10672cdfd11c48d9
* tools(govanity): remove unneeded filesFranck Cuny2022-05-295-147/+0
| | | | | | These files are not needed in the monorepo. Change-Id: I742316d7a6fae817bedbcd2e1f91963bc24c91b7
* Merge remote-tracking branch 'govanity/main'Franck Cuny2022-05-2915-0/+404
|\ | | | | | | Change-Id: I4fd7c748648415db1fa9baaa048ba51e186ec268
| * remove unused MakefileFranck Cuny2022-05-131-27/+0
| |
| * drone: add a configurationFranck Cuny2022-05-111-0/+18
| |
| * scripts: add a script to deployFranck Cuny2022-05-113-6/+25
| | | | | | | | | | Remove the target from the Makefile, add a target to the flake configuration.
| * Dockerfile: update stepsFranck Cuny2022-05-111-2/+2
| |
| * README: update documentationFranck Cuny2022-05-111-0/+4
| |
| * add a flake.nix to the repositoryFranck Cuny2022-05-114-0/+119
| |
| * config: add mpd-statsFranck Cuny2021-10-101-0/+2
| |
| * build: tag correctly the releaseFranck Cuny2021-09-091-4/+8
| | | | | | | | | | | | | | | | | | The version was evaluated before the deploy was done, we need to get that information after running `flyctl deploy`. Annotate the tag since we're doing a release. Remove the argument `IMAGE_REF` since it's being ignored.
| * build: create user before setting workdirFranck Cuny2021-08-141-2/+2
| |
| * build: build the image before deployingFranck Cuny2021-08-141-1/+1
| |
| * build: trim the size of the Docker containerFranck Cuny2021-08-141-3/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to this change, the size of the image was about 300MB: ``` ; docker images|grep fcuny/golang|grep days fcuny/golang.fcuny.net d07add42f21a69e2c057eae8492bbd599dc50082 9fd284c5d8ee 2 days ago 313MB fcuny/golang.fcuny.net ca3dd083f8d6642821781ce03829713524322bbe 8104afadfd1f 2 days ago 313MB ``` With this change, we're reducing the image to less than 10MB: ``` fcuny/golang.fcuny.net 19b3dccc1ff31534df3636d4d7d6a28c0ae1e189 c9ae35574f8e 24 seconds ago 9.09MB ``` Since there's storage and bandwidth involved in this process, there's no point in not going for a smaller image.
| * config: add vanityFranck Cuny2021-08-121-0/+2
| |
| * build: deploy to flyFranck Cuny2021-08-126-17/+83
| | | | | | | | | | | | | | Don't deploy to Google App anymore, but use fly.io instead. Add steps to the Makefile to build a docker image, and to deploy the application to fly.io.
| * config: replace homelab with toolsFranck Cuny2021-08-121-2/+2
| | | | | | | | The repository for `homelab` is not ready yet.
| * vanity: rewrite with templates and external configFranck Cuny2021-08-126-22/+144
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite the program to use external templates and load the configuration from an external source. We don't want to blindly send all the requests to some SCM since we want to support only some modules / program that way. There's two templates, one for requests coming from a browser, which list all the supported modules, and one for the `go get` command. For requests coming from `go get`, we generate a template that indicates where the repository is. The external configuration is in YAML, and list all the supported repositories, and the URL of the repository. It assumes a default VCS for all the modules (git in our case).
| * build: convert to go moduleFranck Cuny2021-08-121-0/+3
| |
| * Add a new target to the Makefile.Franck Cuny2018-04-081-0/+3
| | | | | | | | Add a target to open the console.
| * Redirect go code to github.comFranck Cuny2018-03-304-0/+52
|
* ref(dnsupdate): move under toolsFranck Cuny2022-05-256-0/+881
Integrate properly the tool `dnsupdate` with flake.nix, by adding a default.nix inside its directory. Having all the tools under a directory named `tools` is easier to reason about. I don't need a go.mod at the top level directory either, each tool will have its own.