// This is a jsonnet file, it generates a docker-compose.yml file.
// To generate, run "make docker-compose.yml".

{

  // These are the important top-level settings.
  // Change these to configure the services.

  // Image tag (application version) to use.
  // Note: "latest" is not reccomended in production, as you can't be sure what version
  // you're actually running, and must manually re-pull to get an updated copy.
  image_tag:: "latest",

  // Twitch channel to capture
  channel:: "desertbus",

  // Stream qualities to capture
  qualities:: ["source", "480p"],

  // Local path to save segments to. Full path must already exist. Cannot contain ':'.
  // On OSX you need to change this to /private/var/lib/wubloader
  segments_path:: "/var/lib/wubloader/",

  // The host's port to expose each service on.
  // Only the restreamer needs to be externally accessible - the others are just for monitoring.
  ports:: {
    restreamer: 8080,
    downloader: 8001,
    backfiller: 8002,
  },

  // Other nodes to backfill from. You should not include the local node.
  peers:: [
    "http://wubloader.codegunner.com/"
  ],  

  // Now for the actual docker-compose config

  // docker-compose version
  version: "3",

  services: {

    downloader: {
      image: "quay.io/ekimekim/wubloader-downloader:%s" % $.image_tag,
      // Args for the downloader: set channel and qualities
      command: [
        $.channel,
        "--qualities", std.join(",", $.qualities),
      ],
      // Mount the segments directory at /mnt
      volumes: ["%s:/mnt" % $.segments_path],
      // If the application crashes, restart it.
      restart: "on-failure",
      // Expose on the configured host port by mapping that port to the default
      // port for downloader, which is 8001.
      ports: ["%s:8001" % $.ports.downloader]
    },

    restreamer: {
      image: "quay.io/ekimekim/wubloader-restreamer:%s" % $.image_tag,
      // Mount the segments directory at /mnt
      volumes: ["%s:/mnt" % $.segments_path],
      // If the application crashes, restart it.
      restart: "on-failure",
      // Expose on the configured host port by mapping that port to the default
      // port for restreamer, which is 8000.
      ports: ["%s:8000" % $.ports.restreamer],
    },

    backfiller: {
      image: "quay.io/ekimekim/wubloader-backfiller:%s" % $.image_tag,
      // Args for the backfiller: set channel and qualities
      command: [
        "--stream", $.channel,
        "-v", std.join(",", $.qualities),
        "--nodes", std.join(",", $.peers),
      ],
      // Mount the segments directory at /mnt
      volumes: ["%s:/mnt" % $.segments_path],
      // If the application crashes, restart it.
      restart: "on-failure",
      // Expose on the configured host port by mapping that port to the default
      // port for backfiller, which is 8002.
      ports: ["%s:8002" % $.ports.backfiller]
    },


  },

}