src/Pure/Build/build_manager.scala
changeset 82044 c16859834288
parent 82043 65ac068f9d17
child 82046 5a2b9e25cc85
equal deleted inserted replaced
82043:65ac068f9d17 82044:c16859834288
  1615 
  1615 
  1616   /** build manager store **/
  1616   /** build manager store **/
  1617 
  1617 
  1618   case class Store(options: Options) {
  1618   case class Store(options: Options) {
  1619     val base_dir = Path.explode(options.string("build_manager_dir"))
  1619     val base_dir = Path.explode(options.string("build_manager_dir"))
  1620     val identifier = options.string("build_manager_identifier")
       
  1621     val address = {
  1620     val address = {
  1622       Url(proper_string(options.string("build_manager_address")) getOrElse
  1621       Url(proper_string(options.string("build_manager_address")) getOrElse
  1623         "https://" + options.string("build_manager_ssh_host"))
  1622         "https://" + options.string("build_manager_ssh_host"))
  1624     }
  1623     }
  1625 
  1624 
  1626     val pending = base_dir + Path.basic("pending")
  1625     val pending = base_dir + Path.basic("pending")
  1627     val finished = base_dir + Path.basic("finished")
       
  1628 
  1626 
  1629     def task_dir(task: Task) = pending + Path.basic(task.uuid.toString)
  1627     def task_dir(task: Task) = pending + Path.basic(task.uuid.toString)
  1630     def report(kind: String, id: Long): Report =
       
  1631       Report(kind, id, finished + Path.make(List(kind, id.toString)))
       
  1632 
  1628 
  1633     def sync_permissions(dir: Path, ssh: SSH.System = SSH.Local): Unit = {
  1629     def sync_permissions(dir: Path, ssh: SSH.System = SSH.Local): Unit = {
  1634       ssh.execute("chmod -R g+rwx " + File.bash_path(dir))
  1630       ssh.execute("chmod -R g+rwx " + File.bash_path(dir))
  1635       ssh.execute("chown -R :" + ssh_group + " " + File.bash_path(dir))
  1631       ssh.execute("chown -R :" + ssh_group + " " + File.bash_path(dir))
  1636     }
  1632     }
  1637 
  1633 
  1638     def init_dirs(): Unit =
  1634     def init_dirs(): Unit =
  1639       List(pending, finished).foreach(dir => sync_permissions(Isabelle_System.make_directory(dir)))
  1635       List(pending, finished).foreach(dir => sync_permissions(Isabelle_System.make_directory(dir)))
  1640 
  1636 
  1641     val ssh_group: String = options.string("build_manager_group")
  1637     val ssh_group: String = options.string("build_manager_group")
  1642 
       
  1643     def open_cluster_ssh(): SSH.Session =
       
  1644       SSH.open_session(options,
       
  1645         host = options.string("build_manager_cluster_ssh_host"),
       
  1646         port = options.int("build_manager_cluster_ssh_port"),
       
  1647         user = options.string("build_manager_cluster_ssh_user"))
       
  1648 
       
  1649     def open_ssh(): SSH.Session =
       
  1650       SSH.open_session(options,
       
  1651         host = options.string("build_manager_ssh_host"),
       
  1652         port = options.int("build_manager_ssh_port"),
       
  1653         user = options.string("build_manager_ssh_user"))
       
  1654 
  1638 
  1655     def open_database(server: SSH.Server = SSH.no_server): PostgreSQL.Database =
  1639     def open_database(server: SSH.Server = SSH.no_server): PostgreSQL.Database =
  1656       PostgreSQL.open_database_server(options, server = server,
  1640       PostgreSQL.open_database_server(options, server = server,
  1657         user = options.string("build_manager_database_user"),
  1641         user = options.string("build_manager_database_user"),
  1658         password = options.string("build_manager_database_password"),
  1642         password = options.string("build_manager_database_password"),
  1660         host = options.string("build_manager_database_host"),
  1644         host = options.string("build_manager_database_host"),
  1661         port = options.int("build_manager_database_port"),
  1645         port = options.int("build_manager_database_port"),
  1662         ssh_host = options.string("build_manager_database_ssh_host"),
  1646         ssh_host = options.string("build_manager_database_ssh_host"),
  1663         ssh_port = options.int("build_manager_database_ssh_port"),
  1647         ssh_port = options.int("build_manager_database_ssh_port"),
  1664         ssh_user = options.string("build_manager_database_ssh_user"))
  1648         ssh_user = options.string("build_manager_database_ssh_user"))
       
  1649 
       
  1650 
       
  1651     /* server */
       
  1652 
       
  1653     val identifier = options.string("build_manager_identifier")
       
  1654 
       
  1655     val finished = base_dir + Path.basic("finished")
       
  1656     def report(kind: String, id: Long): Report =
       
  1657       Report(kind, id, finished + Path.make(List(kind, id.toString)))
       
  1658 
       
  1659     def open_cluster_ssh(): SSH.Session =
       
  1660       SSH.open_session(options,
       
  1661         host = options.string("build_manager_cluster_ssh_host"),
       
  1662         port = options.int("build_manager_cluster_ssh_port"),
       
  1663         user = options.string("build_manager_cluster_ssh_user"))
       
  1664 
       
  1665 
       
  1666     /* client */
       
  1667 
       
  1668     def open_ssh(): SSH.Session =
       
  1669       SSH.open_session(options,
       
  1670         host = options.string("build_manager_ssh_host"),
       
  1671         port = options.int("build_manager_ssh_port"),
       
  1672         user = options.string("build_manager_ssh_user"))
  1665 
  1673 
  1666     def open_postgresql_server(): SSH.Server =
  1674     def open_postgresql_server(): SSH.Server =
  1667       PostgreSQL.open_server(options,
  1675       PostgreSQL.open_server(options,
  1668         host = options.string("build_manager_database_host"),
  1676         host = options.string("build_manager_database_host"),
  1669         port = options.int("build_manager_database_port"),
  1677         port = options.int("build_manager_database_port"),