)]}'
{
  "commit": "ae00468363b0006ecf1ae90ed3833bbe54820df5",
  "tree": "3dff4cdf264bed17e66f7aed2c8085b67738104d",
  "parents": [
    "86a714d6e81bb524dc59fda7baa63b45e7180489"
  ],
  "author": {
    "name": "Serge Bazanski",
    "email": "serge@monogon.tech",
    "time": "Tue Apr 18 13:28:48 2023 +0200"
  },
  "committer": {
    "name": "Serge Bazanski",
    "email": "serge@monogon.tech",
    "time": "Wed Apr 19 13:55:01 2023 +0000"
  },
  "message": "cloud/shepherd/equinix: implement recoverer\n\nThis implements basic recovery functionality for \u0027stuck\u0027 agents. The\nshepherd will notice machines with a agent that either never sent a\nheartbeat, or stopped sending heartbeats, and will remove their agent\nstarted tags and reboot the machine. Then, the main agent start logic\nshould kick in again.\n\nMore complex recovery flows can be implemented later, this will do for\nnow.\n\nChange-Id: I2c1b0d0465e4e302cdecce950a041581c2dc8548\nReviewed-on: https://review.monogon.dev/c/monogon/+/1560\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "27f3a4c1a6a46434316a3611b0a6be6b7f03a15d",
      "old_mode": 33188,
      "old_path": "cloud/bmaas/bmdb/model/queries_tags.sql",
      "new_id": "a78150968fc7e3c75766e12796f48c7c94bc0c08",
      "new_mode": 33188,
      "new_path": "cloud/bmaas/bmdb/model/queries_tags.sql"
    },
    {
      "type": "modify",
      "old_id": "d6554e0cc23806648122d23e74b9aa370ffd9245",
      "old_mode": 33188,
      "old_path": "cloud/shepherd/equinix/manager/BUILD.bazel",
      "new_id": "a4e525543ce9b5cc568805451190d67e9fecd6f7",
      "new_mode": 33188,
      "new_path": "cloud/shepherd/equinix/manager/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "39703736b006acef422cc6dadc014af936ad49ce",
      "old_mode": 33188,
      "old_path": "cloud/shepherd/equinix/manager/fakequinix_test.go",
      "new_id": "d9e56839c7309c0f7fcf119630938157663568d6",
      "new_mode": 33188,
      "new_path": "cloud/shepherd/equinix/manager/fakequinix_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f323d039f01c0f7b3294680a7c5e4731d9b51947",
      "new_mode": 33188,
      "new_path": "cloud/shepherd/equinix/manager/recoverer.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8583efd2d665de3b611643fb8a5fa185412710d0",
      "new_mode": 33188,
      "new_path": "cloud/shepherd/equinix/manager/recoverer_test.go"
    },
    {
      "type": "modify",
      "old_id": "e9b9289b21d37ae956fd310558a8c0fbd91aac15",
      "old_mode": 33188,
      "old_path": "cloud/shepherd/equinix/manager/server/main.go",
      "new_id": "2a293dc864a947c4e3da448f2b382b59b28f2c80",
      "new_mode": 33188,
      "new_path": "cloud/shepherd/equinix/manager/server/main.go"
    },
    {
      "type": "modify",
      "old_id": "400556bb16efd27eee614190ad10a97ae9b91ea4",
      "old_mode": 33188,
      "old_path": "cloud/shepherd/equinix/wrapngo/wrapn.go",
      "new_id": "dc54340fdb3fee377c3da2b4a2d75dc944f7ce5a",
      "new_mode": 33188,
      "new_path": "cloud/shepherd/equinix/wrapngo/wrapn.go"
    }
  ]
}
