firethorn

changeset 4280:774e85d540eb

Notes on TAP deployment
author Stelios <stv@roe.ac.uk>
date Wed Sep 04 19:13:41 2019 +0300 (18 months ago)
parents 05f6250eac68
children 01988ccd1200
files doc/notes/stv/20190828-VSA-Swarm-deploy.txt doc/notes/stv/20190903-TAP-Swarm-deploy.txt
line diff
     1.1 --- a/doc/notes/stv/20190828-VSA-Swarm-deploy.txt	Tue Sep 03 21:15:11 2019 +0300
     1.2 +++ b/doc/notes/stv/20190828-VSA-Swarm-deploy.txt	Wed Sep 04 19:13:41 2019 +0300
     1.3 @@ -380,14 +380,14 @@
     1.4  ## docker stack rm ft
     1.5  
     1.6  
     1.7 +[Stevedore@Lothigometh ~]$ docker ps
     1.8 +CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                   PORTS               NAMES
     1.9 +a6b8ce6fc1a7        firethorn/firethorn-py:2.1.35   "python3"                2 minutes ago       Up 2 minutes                                 ft_firethorn-py.1.b6ww5ws0x5hsoxzibvvmzkpg2
    1.10 +e2aa39f93f71        firethorn/ogsadai:2.1.35        "/bin/sh -c '/var/lo…"   3 minutes ago       Up 2 minutes (healthy)   8080/tcp            ft_jarmila.1.k0lafcd3mnk4omqqa6b3sfgga
    1.11 +77839250c9d9        firethorn/firethorn:2.1.35      "/bin/sh -c '/var/lo…"   3 minutes ago       Up 2 minutes (healthy)   8080/tcp            ft_gillian.1.b375fvmymiqzubvwrqi3jcp0u
    1.12 +754c7061e9a7        firethorn/postgres:2.1.35       "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes             5432/tcp            ft_carolina.1.ry40mzo4vy2kipfj8s879ak95
    1.13 +166cb66e3bb1        firethorn/postgres:2.1.35       "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes             5432/tcp            ft_bethany.1.jlh7gdn8oau9dcxhhmd9kafkn
    1.14  
    1.15 -[Stevedore@Ulov ~]$ docker ps
    1.16 -CONTAINER ID        IMAGE                           COMMAND                  CREATED              STATUS                        PORTS               NAMES
    1.17 -88dea2a1c72e        firethorn/ogsadai:2.1.34        "/bin/sh -c '/var/lo…"   About a minute ago   Up About a minute (healthy)   8080/tcp            ft_jarmila.1.3m50c5oopedlm89m2mrz4pl2b
    1.18 -3d0e872d88aa        firethorn/firethorn:2.1.34      "/bin/sh -c '/var/lo…"   About a minute ago   Up About a minute (healthy)   8080/tcp            ft_gillian.1.ebn5rrs2fx2prdxni6w7yo75c
    1.19 -dc31ae81e724        firethorn/firethorn-py:2.1.34   "python3"                2 minutes ago        Up 2 minutes                                      ft_firethorn-py.1.w8k4nk4u3fn81z9ptfapckj3p
    1.20 -729e6e131af5        firethorn/postgres:2.1.34       "docker-entrypoint.s…"   2 minutes ago        Up 2 minutes                  5432/tcp            ft_carolina.1.n7c2bfd8rvetr9k78h0r1beu7
    1.21 -339f72be5f4f        firethorn/postgres:2.1.34       "docker-entrypoint.s…"   2 minutes ago        Up 2 minutes                  5432/tcp            ft_bethany.1.m62ao97g92lylwk4lg7z54krp
    1.22  
    1.23  
    1.24  
    1.25 @@ -395,12 +395,9 @@
    1.26  ## Run Docker Compose tap-deployer.yml from firethorn.py
    1.27  ## ------------------------------------------------------------------------
    1.28  
    1.29 -docker exec -it ft_firethorn-py.1.w8k4nk4u3fn81z9ptfapckj3p bash
    1.30 +docker exec -it fa6b8ce6fc1a7 bash
    1.31  
    1.32 -
    1.33 -source "${HOME:?}/chain.properties"
    1.34 -
    1.35 -	
    1.36 +python3
    1.37  
    1.38  import firethorn
    1.39  import firethorn_utils.configurator as configur
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/doc/notes/stv/20190903-TAP-Swarm-deploy.txt	Wed Sep 04 19:13:41 2019 +0300
     2.3 @@ -0,0 +1,702 @@
     2.4 +#
     2.5 +# <meta:header>
     2.6 +#   <meta:licence>
     2.7 +#     Copyright (c) 2015, ROE (http://www.roe.ac.uk/)
     2.8 +#
     2.9 +#     This information is free software: you can redistribute it and/or modify
    2.10 +#     it under the terms of the GNU General Public License as published by
    2.11 +#     the Free Software Foundation, either version 3 of the License, or
    2.12 +#     (at your option) any later version.
    2.13 +#
    2.14 +#     This information is distributed in the hope that it will be useful,
    2.15 +#     but WITHOUT ANY WARRANTY; without even the implied warranty of
    2.16 +#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2.17 +#     GNU General Public License for more details.
    2.18 +#  
    2.19 +#     You should have received a copy of the GNU General Public License
    2.20 +#     along with this program.  If not, see <http://www.gnu.org/licenses/>.
    2.21 +#   </meta:licence>
    2.22 +# </meta:header>
    2.23 +#
    2.24 +#
    2.25 +
    2.26 +
    2.27 +stv@trop02:~$ createvm
    2.28 +
    2.29 +INFO : Base pool  [base]
    2.30 +INFO : Live pool  [live]
    2.31 +INFO : Connection [qemu:///system]
    2.32 +
    2.33 +INFO : Data path  [/var/local/projects/ischnura/github/src/dat]
    2.34 +
    2.35 +INFO : Machines   [/var/local/projects/ischnura/github/src/dat/tropo-machines.txt]
    2.36 +INFO : Template   [/var/local/projects/ischnura/github/src/dat/tropo-template.xml]
    2.37 +
    2.38 +[1] Araybwyn
    2.39 +[2] Lothigometh
    2.40 +[3] Ulov
    2.41 +[4] Dwiema
    2.42 +[5] Ibalehar
    2.43 +[6] Eterathiel
    2.44 +[7] Siamond
    2.45 +[8] Acilamwen
    2.46 +Select machine name (1) 2
    2.47 +
    2.48 +[1] fedora-28-docker-base-20180708.qcow
    2.49 +[2] fedora-28-8G-docker-base-20181016.qcow
    2.50 +[3] fedora-28-32G-docker-base-20181016.qcow
    2.51 +[4] fedora-28-16G-docker-base-20181016.qcow
    2.52 +Select base image (1) 3
    2.53 +
    2.54 +INFO : Node name [Lothigometh]
    2.55 +INFO : Base name [fedora-28-32G-docker-base-20181016.qcow]
    2.56 +INFO : Base path [/var/lib/libvirt/images/base/fedora-28-32G-docker-base-20181016.qcow]
    2.57 +INFO : Disc name [Lothigometh.qcow]
    2.58 +INFO : Disc size [32GiB]
    2.59 +
    2.60 +INFO : MAC  [52:54:00:02:02:09]
    2.61 +INFO : IPv4 [192.168.202.9]
    2.62 +INFO : IPv6 []
    2.63 +
    2.64 +Create virtual machine (Y/n)Y
    2.65 +
    2.66 +Found existing virtual machine [Lothigometh]
    2.67 +Delete existing virtual machine (Y/n)Y
    2.68 +Stopping virtual machine [Lothigometh]
    2.69 +Domain a22a63dd-3a36-471a-b24a-4a3756abdc96 destroyed
    2.70 +Delete associated storage (Y/n)Y
    2.71 +Deleting virtual machine [Lothigometh]
    2.72 +Domain a22a63dd-3a36-471a-b24a-4a3756abdc96 has been undefined
    2.73 +Y
    2.74 +Volume 'vda'(/libvirt/storage/live/Lothigometh.qcow) removed.
    2.75 +Volume 'vdb'(/var/lib/libvirt/images/init/Lothigometh.iso) removed.
    2.76 +
    2.77 +Creating new volume [Lothigometh.qcow]
    2.78 +Vol Lothigometh.qcow created
    2.79 +Name:           Lothigometh.qcow
    2.80 +Type:           file
    2.81 +Capacity:       32.00 GiB
    2.82 +Allocation:     196.00 KiB
    2.83 +
    2.84 +Vol Lothigometh.iso created
    2.85 +Creating new virtual machine [Lothigometh]
    2.86 +Domain Lothigometh defined from /tmp/tmp.1QAPX8kigk
    2.87 +Starting new virtual machine [Lothigometh]
    2.88 +Domain Lothigometh started
    2.89 +stv@trop02:~$ Y
    2.90 +-bash: Y: command not found
    2.91 +stv@trop02:~$ exit
    2.92 +logout
    2.93 +Connection to trop02.roe.ac.uk closed.
    2.94 +
    2.95 +
    2.96 +ssh-keygen -f "/home/stelios/.ssh/known_hosts" -R "lothigometh"
    2.97 +
    2.98 +ssh Stevedore@Lothigometh
    2.99 +[Stevedore@Lothigometh ~]$ 
   2.100 +
   2.101 +
   2.102 +
   2.103 +## ------------------------------------------------------------------------------------------
   2.104 +## Initialize Swarm with VM's address
   2.105 +## ------------------------------------------------------------------------------------------
   2.106 +
   2.107 +[Stevedore@Lothigometh ~]$ ifconfig
   2.108 +
   2.109 +       ..  192.168.202.9  ..
   2.110 +
   2.111 +
   2.112 +docker swarm init --advertise-addr 192.168.202.9 
   2.113 +
   2.114 +
   2.115 +	To add a worker to this swarm, run the following command:
   2.116 +
   2.117 +	    docker swarm join --token SWMTKN-1-3qmr0ckemiw0rb4wnuss9of7j7xxhjs4nze7nauoiyh9oe9pfv-cjvopumypyb62jqonb1nbx5a0 192.168.202.10:2377
   2.118 +
   2.119 +	To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
   2.120 +
   2.121 +
   2.122 +## Firewall Ports for Swarm
   2.123 +sudo su
   2.124 +    firewall-cmd --add-port=2377/tcp --permanent
   2.125 +    firewall-cmd --add-port=2377/tcp --permanent
   2.126 +    firewall-cmd --add-port=7946/tcp --permanent
   2.127 +    firewall-cmd --add-port=4789/tcp --permanent
   2.128 +    firewall-cmd --add-port=4789/udp --permanent
   2.129 +    iptables -A INPUT -p 50 -j ACCEPT    
   2.130 +    firewall-cmd --reload
   2.131 +exit
   2.132 +
   2.133 +
   2.134 +## -------------------------------------------------------------------------------------------
   2.135 +## Add secret function.
   2.136 +## -------------------------------------------------------------------------------------------
   2.137 +
   2.138 +    secrethost='stv@shepseskaf.roe.ac.uk'
   2.139 +    secretfile='${HOME:?}/secret.store.20190828'
   2.140 +
   2.141 +    secret()
   2.142 +    {
   2.143 +        local key=${1:?}
   2.144 +        ssh -o 'VisualHostKey=no' "${secrethost:?}" "sed -n 's/${key}=\\(.*\\)/\\1/p' \"${secretfile:?}\"" 
   2.145 +    }
   2.146 +
   2.147 +    secret 'firethorn.ssh.keys' >> "${HOME}/.ssh/authorized_keys"
   2.148 +
   2.149 +
   2.150 +
   2.151 +## -------------------------------------------------------------------------------------------
   2.152 +## Set the target branch and builtag
   2.153 +## -------------------------------------------------------------------------------------------
   2.154 +
   2.155 +
   2.156 +    export buildtag=2.1.35
   2.157 +    export branch=default
   2.158 +
   2.159 +
   2.160 +
   2.161 +## -------------------------------------------------------------------------------------------
   2.162 +## Create our chain.properties file
   2.163 +## -------------------------------------------------------------------------------------------
   2.164 +
   2.165 +cat > "${HOME:?}/chain.properties" << EOF
   2.166 +
   2.167 +metadata=postgres
   2.168 +metauser=$(pwgen 20 1)
   2.169 +metapass=$(pwgen 20 1) 
   2.170 +
   2.171 +userhost=$(secret 'firethorn.user.host')
   2.172 +userdata=$(secret 'firethorn.user.data')
   2.173 +useruser=$(secret 'firethorn.user.user')
   2.174 +userpass=$(secret 'firethorn.user.pass')
   2.175 +usertype=mssql
   2.176 +
   2.177 +datahost=$(secret 'firethorn.data.host')
   2.178 +datadata=$(secret 'firethorn.data.data')
   2.179 +datacatalog=$(secret 'firethorn.data.catalog')
   2.180 +datatype=$(secret 'firethorn.data.type')
   2.181 +datauser=$(secret 'firethorn.data.user')
   2.182 +datapass=$(secret 'firethorn.data.pass')
   2.183 +
   2.184 +tapschemadata=$(secret 'firethorn.tapschema.database.name')
   2.185 +tapschemauser=$(secret 'firethorn.tapschema.database.user')
   2.186 +tapschemapass=$(secret 'firethorn.tapschema.database.pass')
   2.187 +tapschemahost=$(secret 'firethorn.tapschema.database.host')
   2.188 +tapschemaport=$(secret 'firethorn.tapschema.database.port')
   2.189 +tapschematype=$(secret 'firethorn.tapschema.database.type')
   2.190 +tapschemajdbc=$(secret 'firethorn.tapschema.jdbc.name')
   2.191 +
   2.192 +tunneluser=$(secret 'ssh.tunnel.user')
   2.193 +tunnelhost=$(secret 'ssh.tunnel.host')
   2.194 +
   2.195 +admingroup=$(pwgen 20 1)	
   2.196 +adminuser=$(pwgen 20 1)
   2.197 +adminpass=$(pwgen 20 1)
   2.198 +
   2.199 +adql_query_delay_first=$(secret 'adql.query.delay.first')
   2.200 + 
   2.201 +firethorn_limits_rows_absolute=$(secret 'firethorn.limits.rows.absolute')
   2.202 +firethorn_limits_rows_default=$(secret 'firethorn.limits.rows.default')
   2.203 +
   2.204 +guestgroup=friends
   2.205 +endpoint=$(secret 'endpoint')
   2.206 +
   2.207 +firethornhost=gillian
   2.208 +
   2.209 +EOF
   2.210 +
   2.211 +
   2.212 +
   2.213 +## -----------------------------------------------------
   2.214 +## Create our Firethorn properties.
   2.215 +## -----------------------------------------------------
   2.216 +
   2.217 +source "${HOME:?}/chain.properties"
   2.218 +cat > "${HOME:?}/firethorn.properties" << EOF
   2.219 +
   2.220 +firethorn.meta.type=pgsql
   2.221 +firethorn.meta.driver=org.postgresql.Driver
   2.222 +firethorn.meta.host=bethany
   2.223 +firethorn.meta.url=jdbc:postgresql://bethany/${metadata}
   2.224 +firethorn.meta.data=postgres
   2.225 +firethorn.meta.user=${metauser:?}
   2.226 +firethorn.meta.pass=${metapass:?}
   2.227 +
   2.228 +firethorn.user.type=mssql
   2.229 +firethorn.user.url=jdbc:jtds:sqlserver://${userhost:?}/${userdata:?}
   2.230 +firethorn.user.driver=net.sourceforge.jtds.jdbc.Driver
   2.231 +firethorn.user.host=${userhost:?}
   2.232 +firethorn.user.data=${userdata:?}
   2.233 +firethorn.user.user=${useruser:?}
   2.234 +firethorn.user.pass=${userpass:?}
   2.235 +
   2.236 +firethorn.tapschema.resource.name=${tapschemajdbc}
   2.237 +firethorn.tapschema.database.name=${tapschemadata}
   2.238 +firethorn.tapschema.database.host=${tapschemahost}
   2.239 +firethorn.tapschema.database.port=${tapschemaport}
   2.240 +firethorn.tapschema.database.user=${tapschemauser}
   2.241 +firethorn.tapschema.database.pass=${tapschemapass}
   2.242 +
   2.243 +firethorn.admin.community=${admingroup:?}
   2.244 +firethorn.admin.user.name=${adminuser:?}
   2.245 +firethorn.admin.user.pass=${adminpass:?}
   2.246 +
   2.247 +firethorn.guest.community=${guestgroup:?}
   2.248 +
   2.249 +adql.query.delay.first=${adql_query_delay_first:?}
   2.250 +
   2.251 +firethorn.limits.rows.absolute=${firethorn_limits_rows_absolute:?}
   2.252 +firethorn.limits.rows.default=${firethorn_limits_rows_default:?}
   2.253 +
   2.254 +firethornhost=gillian
   2.255 +
   2.256 +
   2.257 +EOF
   2.258 +
   2.259 +
   2.260 +
   2.261 +## -------------------------------------------------------------------------------------------
   2.262 +## Create our compose env files.
   2.263 +## -------------------------------------------------------------------------------------------
   2.264 +
   2.265 +source "${HOME:?}/chain.properties"
   2.266 +cat > "${HOME:?}/.env" << EOF
   2.267 +
   2.268 +buildtag=${branch:?}
   2.269 +endpoint=${endpoint:?}
   2.270 +
   2.271 +
   2.272 +metadata=postgres
   2.273 +metauser=${metauser:?}
   2.274 +metapass=${metapass:?}
   2.275 +firethorn.meta.type=pgsql
   2.276 +firethorn.meta.driver=org.postgresql.Driver
   2.277 +firethorn.meta.host=bethany
   2.278 +firethorn.meta.url=jdbc:postgresql://bethany/postgres
   2.279 +firethorn.meta.data=postgres
   2.280 +firethorn.meta.user=${metauser:?}
   2.281 +firethorn.meta.pass=${metapass:?}
   2.282 +
   2.283 +
   2.284 +datadata=${datadata:?}
   2.285 +datauser=${datauser:?}
   2.286 +datapass=${datapass:?}
   2.287 +datahost=${datahost:?}
   2.288 +datacatalog=${datacatalog:?}
   2.289 +datatype=mssql
   2.290 +
   2.291 +
   2.292 +tapschemadata=${tapschemadata:?}
   2.293 +tapschemauser=${tapschemauser:?}
   2.294 +tapschemapass=${tapschemapass:?}
   2.295 +tapschemahost=${tapschemahost}
   2.296 +tapschemaport=${tapschemaport:?}
   2.297 +tapschemajdbc=${tapschemajdbc:?}
   2.298 +tapschematype=${tapschematype:?}
   2.299 +firethorn.tapschema.resource.name=${tapschemajdbc:?}
   2.300 +firethorn.tapschema.database.name=${tapschemadata:?}
   2.301 +firethorn.tapschema.database.host=${tapschemahost:?}
   2.302 +firethorn.tapschema.database.port=5432
   2.303 +firethorn.tapschema.database.user=${tapschemauser:?}
   2.304 +firethorn.tapschema.database.pass=${tapschemapass:?}
   2.305 +firethorn.tapschema.database.type=pgsql
   2.306 +
   2.307 +userhost=${userhost:?}
   2.308 +userdata=${userdata:?}
   2.309 +useruser=${useruser:?}
   2.310 +userpass=${userpass:?}
   2.311 +usertype=mssql
   2.312 +firethorn.user.type=mssql
   2.313 +firethorn.user.url=jdbc:jtds:sqlserver://${userhost:?}/${userdata:?}
   2.314 +firethorn.user.driver=net.sourceforge.jtds.jdbc.Driver
   2.315 +firethorn.user.host=${userhost:?}
   2.316 +firethorn.user.data=${userdata:?}
   2.317 +firethorn.user.user=${useruser:?}
   2.318 +firethorn.user.pass=${userpass:?}
   2.319 +
   2.320 +
   2.321 +admingroup=${admingroup:?}
   2.322 +adminuser=${adminuser:?}
   2.323 +adminpass=${adminpass:?}
   2.324 +guestgroup=${guestgroup:?}
   2.325 +firethorn.admin.community=${admingroup:?}
   2.326 +firethorn.admin.user.name=${adminuser:?}
   2.327 +firethorn.admin.user.pass=${adminpass:?}
   2.328 +firethorn.guest.community=${guestgroup:?}
   2.329 +
   2.330 +
   2.331 +adql_query_delay_first=${adql_query_delay_first:?}
   2.332 +adql.query.delay.first=${adql_query_delay_first:?}
   2.333 +firethorn_limits_rows_absolute=${firethorn_limits_rows_absolute:?}
   2.334 +firethorn_limits_rows_default=${firethorn_limits_rows_default:?}
   2.335 +firethorn.limits.rows.absolute=${firethorn_limits_rows_absolute:?}
   2.336 +firethorn.limits.rows.default=${firethorn_limits_rows_default:?}
   2.337 +
   2.338 +firethorn.ogsadai.endpoint=http://jarmila:8080/ogsadai/services
   2.339 +firethornhost=gillian
   2.340 +
   2.341 +
   2.342 +EOF
   2.343 +
   2.344 +
   2.345 +source "${HOME:?}/chain.properties"
   2.346 +cat > "${HOME:?}/.tapschema_env" << EOF
   2.347 +
   2.348 +POSTGRES_DB=${tapschemadata}
   2.349 +POSTGRES_USER=${tapschemauser}
   2.350 +POSTGRES_PASSWORD=${tapschemapass}
   2.351 +
   2.352 +EOF
   2.353 +
   2.354 +
   2.355 +source "${HOME:?}/chain.properties"
   2.356 +cat > "${HOME:?}/.metadata_env" << EOF
   2.357 +
   2.358 +POSTGRES_DB=${metadata}
   2.359 +POSTGRES_USER=${metauser}
   2.360 +POSTGRES_PASSWORD=${metapass}
   2.361 +         
   2.362 +EOF
   2.363 +
   2.364 +
   2.365 +## -------------------------------------------------------------------------------------------
   2.366 +## Fetch the TAP Deployer
   2.367 +## -------------------------------------------------------------------------------------------
   2.368 +
   2.369 +wget https://raw.githubusercontent.com/stvoutsin/firethorn.py/master/docker/firethorn-compose-v3.yml -O  docker-compose.yml
   2.370 +
   2.371 +
   2.372 +
   2.373 +## ------------------------------------------------------------------------
   2.374 +## Deploy Swarm stack
   2.375 +## ------------------------------------------------------------------------
   2.376 +
   2.377 +docker stack deploy -c docker-compose.yml ft
   2.378 +
   2.379 +
   2.380 +
   2.381 +## ------------------------------------------------------------------------
   2.382 +## To remove all docker services 
   2.383 +## ------------------------------------------------------------------------
   2.384 +
   2.385 +## docker service rm $(docker service ls -q)
   2.386 +
   2.387 +
   2.388 +
   2.389 +## ------------------------------------------------------------------------
   2.390 +## To remove stack of services
   2.391 +## ------------------------------------------------------------------------
   2.392 +
   2.393 +## docker stack rm ft
   2.394 +
   2.395 +
   2.396 +[Stevedore@Lothigometh ~]$ docker ps
   2.397 +CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                   PORTS               NAMES
   2.398 +a6b8ce6fc1a7        firethorn/firethorn-py:2.1.35   "python3"                3 minutes ago       Up 3 minutes                                 ft_firethorn-py.1.b6ww5ws0x5hsoxzibvvmzkpg2
   2.399 +e2aa39f93f71        firethorn/ogsadai:2.1.35        "/bin/sh -c '/var/lo…"   3 minutes ago       Up 3 minutes (healthy)   8080/tcp            ft_jarmila.1.k0lafcd3mnk4omqqa6b3sfgga
   2.400 +77839250c9d9        firethorn/firethorn:2.1.35      "/bin/sh -c '/var/lo…"   3 minutes ago       Up 3 minutes (healthy)   8080/tcp            ft_gillian.1.b375fvmymiqzubvwrqi3jcp0u
   2.401 +754c7061e9a7        firethorn/postgres:2.1.35       "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes             5432/tcp            ft_carolina.1.ry40mzo4vy2kipfj8s879ak95
   2.402 +166cb66e3bb1        firethorn/postgres:2.1.35       "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes             5432/tcp            ft_bethany.1.jlh7gdn8oau9dcxhhmd9kafkn
   2.403 +
   2.404 +
   2.405 +
   2.406 +## ------------------------------------------------------------------------
   2.407 +## Run Docker Compose tap-deployer.yml from firethorn.py
   2.408 +## ------------------------------------------------------------------------
   2.409 +
   2.410 +docker exec -it a6b8ce6fc1a7 bash
   2.411 +
   2.412 +
   2.413 +
   2.414 +python3
   2.415 +
   2.416 +import firethorn
   2.417 +import firethorn_utils.configurator as configur
   2.418 +ft = firethorn.Firethorn(endpoint="http://gillian:8080/firethorn")
   2.419 +ft.login(firethorn.config.adminuser, firethorn.config.adminpass, firethorn.config.admingroup)
   2.420 +configurator =  configur.Configurator(ft)
   2.421 +
   2.422 +
   2.423 +configurator.load_resources("/home/firethorn.py/firethorn/data/osa-tap.json")
   2.424 +
   2.425 + > TAP Service available at: http://gillian:8080/firethorn/tap/54/
   2.426 +
   2.427 +
   2.428 +
   2.429 +configurator.load_resources("/home/firethorn.py/firethorn/data/ssa-tap.json")
   2.430 +
   2.431 + > TAP Service available at: http://gillian:8080/firethorn/tap/57/
   2.432 +
   2.433 +
   2.434 +
   2.435 +## Update vsa json config file with VHSDR6, VVVDR5 catalogs
   2.436 +
   2.437 +nano /home/firethorn.py/firethorn/data/vsa-tap.json 
   2.438 +
   2.439 +{  
   2.440 +    
   2.441 +   ..
   2.442 +                    {
   2.443 +                        "jdbcid" : "avASDeA0",
   2.444 +                        "jdbcschema" : "dbo",
   2.445 +                        "jdbccatalog": "VVVDR5",
   2.446 +                        "adqlschema": "VVVDR5",
   2.447 +                        "metadata": {
   2.448 +                            "metadoc": "https://raw.githubusercontent.com/stvoutsin/metadata/master/metadocs/VVVDR5_TablesSchema.xml",
   2.449 +                            "catalog": "VVVDR5"
   2.450 +                        }
   2.451 +                    },
   2.452 +  .. 
   2.453 +                    {
   2.454 +                        "jdbcid" : "avASDeA0",   
   2.455 +                        "jdbcschema" : "dbo",         
   2.456 +                        "jdbccatalog": "VHSDR6",
   2.457 +                        "adqlschema": "VHSDR6",
   2.458 +                        "metadata": {
   2.459 +                            "metadoc": "https://raw.githubusercontent.com/stvoutsin/metadata/master/metadocs/VHSDR6_TablesSchema.xml",
   2.460 +                            "catalog": "VHSDR6"
   2.461 +                        }
   2.462 +                    }, 
   2.463 +  ..
   2.464 +}
   2.465 +
   2.466 +
   2.467 +
   2.468 +
   2.469 +configurator.load_resources("/home/firethorn.py/firethorn/data/vsa-tap.json")
   2.470 +
   2.471 + > TAP Service available at: http://gillian:8080/firethorn/tap/60/
   2.472 +
   2.473 +
   2.474 +configurator.load_resources("/home/firethorn.py/firethorn/data/wsa-tap.json")
   2.475 +
   2.476 +..
   2.477 +Importing JDBC Schema: UKIDSSDR10PLUS
   2.478 +ERROR:root:HTTP Error 404: 
   2.479 +Traceback (most recent call last):
   2.480 +  File "/usr/local/lib/python3.5/dist-packages/firethorn/models/base/base_object.py", line 90, in get_json
   2.481 +    with urllib.request.urlopen( req, data) as response:
   2.482 +  File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
   2.483 +    return opener.open(url, data, timeout)
   2.484 +  File "/usr/lib/python3.5/urllib/request.py", line 472, in open
   2.485 +    response = meth(req, response)
   2.486 +  File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
   2.487 +    'http', request, response, code, msg, hdrs)
   2.488 +  File "/usr/lib/python3.5/urllib/request.py", line 510, in error
   2.489 +    return self._call_chain(*args)
   2.490 +  File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
   2.491 +    result = func(*args)
   2.492 +  File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
   2.493 +    raise HTTPError(req.full_url, code, msg, hdrs, fp)
   2.494 +urllib.error.HTTPError: HTTP Error 404: 
   2.495 +ERROR:root:Expecting value: line 1 column 1 (char 0)
   2.496 +Traceback (most recent call last):
   2.497 +  File "/usr/local/lib/python3.5/dist-packages/firethorn/models/adql/adql_resource.py", line 112, in import_jdbc_schema
   2.498 +    response_json_list = json.loads(response.text)
   2.499 +  File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
   2.500 +    return _default_decoder.decode(s)
   2.501 +  File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
   2.502 +    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
   2.503 +  File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
   2.504 +    raise JSONDecodeError("Expecting value", s, err.value) from None
   2.505 +json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
   2.506 +...
   2.507 +Importing JDBC Schema: SDSSDR9
   2.508 +ERROR:root:HTTP Error 404: 
   2.509 +Traceback (most recent call last):
   2.510 +  File "/usr/local/lib/python3.5/dist-packages/firethorn/models/base/base_object.py", line 90, in get_json
   2.511 +    with urllib.request.urlopen( req, data) as response:
   2.512 +  File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
   2.513 +    return opener.open(url, data, timeout)
   2.514 +  File "/usr/lib/python3.5/urllib/request.py", line 472, in open
   2.515 +    response = meth(req, response)
   2.516 +  File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
   2.517 +    'http', request, response, code, msg, hdrs)
   2.518 +  File "/usr/lib/python3.5/urllib/request.py", line 510, in error
   2.519 +    return self._call_chain(*args)
   2.520 +  File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
   2.521 +    result = func(*args)
   2.522 +  File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
   2.523 +    raise HTTPError(req.full_url, code, msg, hdrs, fp)
   2.524 +urllib.error.HTTPError: HTTP Error 404: 
   2.525 +ERROR:root:Expecting value: line 1 column 1 (char 0)
   2.526 +Traceback (most recent call last):
   2.527 +  File "/usr/local/lib/python3.5/dist-packages/firethorn/models/adql/adql_resource.py", line 112, in import_jdbc_schema
   2.528 +    response_json_list = json.loads(response.text)
   2.529 +  File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
   2.530 +    return _default_decoder.decode(s)
   2.531 +  File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
   2.532 +    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
   2.533 +  File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
   2.534 +    raise JSONDecodeError("Expecting value", s, err.value) from None
   2.535 +json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
   2.536 +...
   2.537 +Importing JDBC Schema: SSA
   2.538 +ERROR:root:HTTP Error 404: 
   2.539 +Traceback (most recent call last):
   2.540 +  File "/usr/local/lib/python3.5/dist-packages/firethorn/models/base/base_object.py", line 90, in get_json
   2.541 +    with urllib.request.urlopen( req, data) as response:
   2.542 +  File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
   2.543 +    return opener.open(url, data, timeout)
   2.544 +  File "/usr/lib/python3.5/urllib/request.py", line 472, in open
   2.545 +    response = meth(req, response)
   2.546 +  File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
   2.547 +    'http', request, response, code, msg, hdrs)
   2.548 +  File "/usr/lib/python3.5/urllib/request.py", line 510, in error
   2.549 +    return self._call_chain(*args)
   2.550 +  File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
   2.551 +    result = func(*args)
   2.552 +  File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
   2.553 +    raise HTTPError(req.full_url, code, msg, hdrs, fp)
   2.554 +urllib.error.HTTPError: HTTP Error 404: 
   2.555 +ERROR:root:Expecting value: line 1 column 1 (char 0)
   2.556 +Traceback (most recent call last):
   2.557 +  File "/usr/local/lib/python3.5/dist-packages/firethorn/models/adql/adql_resource.py", line 112, in import_jdbc_schema
   2.558 +    response_json_list = json.loads(response.text)
   2.559 +  File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
   2.560 +    return _default_decoder.decode(s)
   2.561 +  File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
   2.562 +    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
   2.563 +  File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
   2.564 +    raise JSONDecodeError("Expecting value", s, err.value) from None
   2.565 +json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
   2.566 +..
   2.567 +Importing JDBC Schema: WISE
   2.568 + 
   2.569 +  > TAP Service available at: http://gillian:8080/firethorn/tap/63/
   2.570 +
   2.571 +
   2.572 +
   2.573 +
   2.574 +
   2.575 +## ------------------------------------------------------------------------
   2.576 +## Validate
   2.577 +## ------------------------------------------------------------------------
   2.578 +
   2.579 +java -Xmx4096m -jar stilts.jar -disk taplint tapurl=http://tap.roe.ac.uk/vsa debug=true maxtable=10
   2.580 +
   2.581 +This is STILTS taplint, 3.1-6/78f78cf (2019-05-09)
   2.582 +Static report types: ERROR(124), WARNING(48), INFO(21), SUMMARY(9), FAILURE(21)
   2.583 +
   2.584 +Section TMV: Validate table metadata against XML schema
   2.585 +I-TMV-VURL-1 Validating http://tap.roe.ac.uk/vsa/tables as tableset (http://www.ivoa.net/xml/VODataService/v1.1)
   2.586 +S-TMV-VALI-1 SAX report: warnings 0, errors 0, fatal 0
   2.587 +
   2.588 +Section TME: Check content of tables metadata from /tables
   2.589 +I-TME-TURL-1 Reading table metadata from http://tap.roe.ac.uk/vsa/tables
   2.590 +S-TME-SUMM-1 Schemas: 43, Tables: 2748, Columns: 114479, Foreign Keys: 0
   2.591 +S-TME-FLGS-1 Standard column flags: indexed: 0, primary: 0, nullable: 0
   2.592 +S-TME-FLGO-1 Other column flags: none
   2.593 +
   2.594 +Section TMS: Check content of tables metadata from TAP_SCHEMA
   2.595 +I-TMS-QSUB-1 Submitting query: SELECT COUNT(*) AS nr FROM TAP_SCHEMA.schemas
   2.596 +I-TMS-QGET-1 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+COUNT%28*%29+AS+nr+FROM+TAP_SCHEMA.schemas
   2.597 +I-TMS-QSUB-2 Submitting query: SELECT COUNT(*) AS nr FROM TAP_SCHEMA.tables
   2.598 +I-TMS-QGET-2 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+COUNT%28*%29+AS+nr+FROM+TAP_SCHEMA.tables
   2.599 +I-TMS-QSUB-3 Submitting query: SELECT COUNT(*) AS nr FROM TAP_SCHEMA.columns
   2.600 +I-TMS-QGET-3 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+COUNT%28*%29+AS+nr+FROM+TAP_SCHEMA.columns
   2.601 +I-TMS-QSUB-4 Submitting query: SELECT COUNT(*) AS nr FROM TAP_SCHEMA.keys
   2.602 +I-TMS-QGET-4 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+COUNT%28*%29+AS+nr+FROM+TAP_SCHEMA.keys
   2.603 +I-TMS-QSUB-5 Submitting query: SELECT COUNT(*) AS nr FROM TAP_SCHEMA.key_columns
   2.604 +I-TMS-QGET-5 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+COUNT%28*%29+AS+nr+FROM+TAP_SCHEMA.key_columns
   2.605 +I-TMS-QSUB-6 Submitting query: SELECT principal, indexed, std, "size" FROM TAP_SCHEMA.columns
   2.606 +I-TMS-QGET-6 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+principal%2C+indexed%2C+std%2C+%22size%22+FROM+TAP_SCHEMA.columns&MAXREC=114489
   2.607 +I-TMS-QSUB-7 Submitting query: SELECT TOP 1 * FROM TAP_SCHEMA.columns
   2.608 +I-TMS-QGET-7 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+TOP+1+*+FROM+TAP_SCHEMA.columns&MAXREC=1
   2.609 +I-TMS-QSUB-8 Submitting query: SELECT ft_column_id, std, indexed, principal, arraysize, ts_column_id, datatype, utype, ucd, unit, description, column_name, table_name FROM TAP_SCHEMA.columns
   2.610 +I-TMS-QGET-8 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+ft_column_id%2C+std%2C+indexed%2C+principal%2C+arraysize%2C+ts_column_id%2C+datatype%2C+utype%2C+ucd%2C+unit%2C+description%2C+column_name%2C+table_name+FROM+TAP_SCHEMA.columns&MAXREC=114489
   2.611 +I-TMS-QSUB-9 Submitting query: SELECT from_column, target_column, key_id FROM TAP_SCHEMA.key_columns
   2.612 +I-TMS-QGET-9 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+from_column%2C+target_column%2C+key_id+FROM+TAP_SCHEMA.key_columns&MAXREC=114489
   2.613 +S-TMS-SUMM-1 Schemas: 43, Tables: 2748, Columns: 114479, Foreign Keys: 0
   2.614 +S-TMS-FLGS-1 Standard column flags: indexed: 0, principal: 7, std: 33
   2.615 +S-TMS-QNUM-1 Successful/submitted TAP queries: 13/13
   2.616 +S-TMS-QTIM-1 Average successful query time: 4.3s
   2.617 +I-TMS-QSUB-x (4 more)
   2.618 +I-TMS-QGET-x (4 more)
   2.619 +
   2.620 +Section TMC: Compare table metadata from /tables and TAP_SCHEMA
   2.621 +
   2.622 +Section CPV: Validate capabilities against XML schema
   2.623 +I-CPV-VURL-1 Validating http://tap.roe.ac.uk/vsa/capabilities as capabilities (http://www.ivoa.net/xml/VOSICapabilities/v1.0)
   2.624 +S-CPV-VALI-1 SAX report: warnings 0, errors 0, fatal 0
   2.625 +
   2.626 +Section CAP: Check content of TAPRegExt capabilities record
   2.627 +I-CAP-CURL-1 Reading capability metadata from http://tap.roe.ac.uk/vsa/capabilities
   2.628 +
   2.629 +Section AVV: Validate availability against XML schema
   2.630 +I-AVV-VURL-1 Validating http://tap.roe.ac.uk/vsa/availability as availability (http://www.ivoa.net/xml/VOSIAvailability/v1.0)
   2.631 +S-AVV-VALI-1 SAX report: warnings 0, errors 0, fatal 0
   2.632 +
   2.633 +Section QGE: Make ADQL queries in sync GET mode
   2.634 +I-QGE-QSUB-1 Submitting query: SELECT TOP 10 surveyID FROM VIKINGDR3.ExternalSurveyTable
   2.635 +I-QGE-QGET-1 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+TOP+10+surveyID+FROM+VIKINGDR3.ExternalSurveyTable
   2.636 +I-QGE-QSUB-2 Submitting query: SELECT TOP 1 surveyID FROM VIKINGDR3.ExternalSurveyTable
   2.637 +I-QGE-QGET-2 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL-2.0&QUERY=SELECT+TOP+1+surveyID+FROM+VIKINGDR3.ExternalSurveyTable
   2.638 +I-QGE-QSUB-3 Submitting query: SELECT TOP 1 surveyID FROM VIKINGDR3.ExternalSurveyTable
   2.639 +I-QGE-QGET-3 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+TOP+1+surveyID+FROM+VIKINGDR3.ExternalSurveyTable
   2.640 +I-QGE-QSUB-4 Submitting query: SELECT TOP 8 releaseNum, productID AS taplint_c_2, V.ppErrBitsStatus, cuEventID AS taplint_c_4, multiframeID, V.programmeID AS taplint_c_6 FROM VIKINGDR3.ProgrammeFrame AS V
   2.641 +I-QGE-QGET-4 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+TOP+8+releaseNum%2C+productID+AS+taplint_c_2%2C+V.ppErrBitsStatus%2C+cuEventID+AS+taplint_c_4%2C+multiframeID%2C+V.programmeID+AS+taplint_c_6++FROM+VIKINGDR3.ProgrammeFrame+AS+V
   2.642 +I-QGE-QSUB-5 Submitting query: SELECT programmeID FROM VIKINGDR3.RequiredDiffImage
   2.643 +I-QGE-QGET-5 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=SELECT+programmeID+FROM+VIKINGDR3.RequiredDiffImage&MAXREC=0
   2.644 +I-QGE-DUFF-1 Submitting duff query: DUFF QUERY
   2.645 +I-QGE-QGET-6 Query GET URL: http://tap.roe.ac.uk/vsa/sync?REQUEST=doQuery&LANG=ADQL&QUERY=DUFF+QUERY
   2.646 +S-QGE-QNUM-1 Successful/submitted TAP queries: 5/5
   2.647 +S-QGE-QTIM-1 Average successful query time: 1.3s
   2.648 +
   2.649 +Section QPO: Make ADQL queries in sync POST mode
   2.650 +I-QPO-QSUB-1 Submitting query: SELECT TOP 10 surveyID FROM VIKINGDR3.ExternalSurveyTable
   2.651 +I-QPO-QSUB-2 Submitting query: SELECT TOP 8 releaseNum, productID AS taplint_c_2, V.ppErrBitsStatus, cuEventID AS taplint_c_4, multiframeID, V.programmeID AS taplint_c_6 FROM VIKINGDR3.ProgrammeFrame AS V
   2.652 +I-QPO-QSUB-3 Submitting query: SELECT programmeID FROM VIKINGDR3.RequiredDiffImage
   2.653 +I-QPO-DUFF-1 Submitting duff query: DUFF QUERY
   2.654 +S-QPO-QNUM-1 Successful/submitted TAP queries: 3/3
   2.655 +S-QPO-QTIM-1 Average successful query time: 1.3s
   2.656 +
   2.657 +Section QAS: Make ADQL queries in async mode
   2.658 +I-QAS-QSUB-1 Submitting query: SELECT TOP 10 surveyID FROM VIKINGDR3.ExternalSurveyTable
   2.659 +I-QAS-QJOB-1 Submitted query at http://tap.roe.ac.uk/firethorn/tap/60/async/843161
   2.660 +I-QAS-QSUB-2 Submitting query: SELECT TOP 8 releaseNum, productID AS taplint_c_2, V.ppErrBitsStatus, cuEventID AS taplint_c_4, multiframeID, V.programmeID AS taplint_c_6 FROM VIKINGDR3.ProgrammeFrame AS V
   2.661 +I-QAS-QJOB-2 Submitted query at http://tap.roe.ac.uk/firethorn/tap/60/async/843162
   2.662 +I-QAS-QSUB-3 Submitting query: SELECT programmeID FROM VIKINGDR3.RequiredDiffImage
   2.663 +I-QAS-QJOB-3 Submitted query at http://tap.roe.ac.uk/firethorn/tap/60/async/843163
   2.664 +I-QAS-DUFF-1 Submitting duff query: DUFF QUERY
   2.665 +I-QAS-QJOB-4 Submitted query at http://tap.roe.ac.uk/firethorn/tap/60/async/843164
   2.666 +S-QAS-QNUM-1 Successful/submitted TAP queries: 3/3
   2.667 +S-QAS-QTIM-1 Average successful query time: 2.2s
   2.668 +
   2.669 +Section UWS: Test asynchronous UWS/TAP behaviour
   2.670 +I-UWS-CJOB-1 Created new job http://tap.roe.ac.uk/firethorn/tap/60/async/843165
   2.671 +I-UWS-POPA-1 POSTed runId=TAPLINT-002 to http://tap.roe.ac.uk/firethorn/tap/60/async/843165/parameters
   2.672 +I-UWS-POPA-2 POSTed PHASE=ABORT to http://tap.roe.ac.uk/firethorn/tap/60/async/843165/phase
   2.673 +I-UWS-POPA-3 POSTed ACTION=DELETE to http://tap.roe.ac.uk/firethorn/tap/60/async/843165
   2.674 +I-UWS-CJOB-2 Created new job http://tap.roe.ac.uk/firethorn/tap/60/async/843166
   2.675 +I-UWS-CJOB-3 Created new job http://tap.roe.ac.uk/firethorn/tap/60/async/843167
   2.676 +I-UWS-VUWS-1 UWS job document implicitly V1.0
   2.677 +I-UWS-POPA-4 POSTed PHASE=RUN to http://tap.roe.ac.uk/firethorn/tap/60/async/843167/phase
   2.678 +
   2.679 +Section MDQ: Check table query result columns against declared metadata
   2.680 +I-MDQ-TMAX-1 Testing only 10/2748 tables
   2.681 +I-MDQ-QSUB-1 Submitting query: SELECT TOP 1 * FROM "FIRST".first08Jul16Source
   2.682 +I-MDQ-QSUB-2 Submitting query: SELECT TOP 1 * FROM "FIRST".firstSource
   2.683 +I-MDQ-QSUB-3 Submitting query: SELECT TOP 1 * FROM "FIRST".firstSource12Feb16
   2.684 +I-MDQ-QSUB-4 Submitting query: SELECT TOP 1 * FROM BestDR1."Diagnostics"
   2.685 +I-MDQ-QSUB-5 Submitting query: SELECT TOP 1 * FROM BestDR1."First"
   2.686 +I-MDQ-QSUB-6 Submitting query: SELECT TOP 1 * FROM BestDR1."Match"
   2.687 +I-MDQ-QSUB-7 Submitting query: SELECT TOP 1 * FROM BestDR1."Region"
   2.688 +I-MDQ-QSUB-8 Submitting query: SELECT TOP 1 * FROM BestDR1."Zone"
   2.689 +I-MDQ-QSUB-9 Submitting query: SELECT TOP 1 * FROM BestDR1.Best2Sector
   2.690 +S-MDQ-QNUM-1 Successful/submitted TAP queries: 10/10
   2.691 +S-MDQ-QTIM-1 Average successful query time: 1.4s
   2.692 +I-MDQ-QSUB-x (1 more)
   2.693 +
   2.694 +Section OBS: Test implementation of ObsCore Data Model
   2.695 +I-OBS-NODM-1 Table capabilities lists no ObsCore DataModel - no ObsCore tests
   2.696 +
   2.697 +Section UPL: Make queries with table uploads
   2.698 +F-UPL-NOUP-1 Table capabilities lists no upload methods - will not attempt upload tests
   2.699 +
   2.700 +Section EXA: Check content of examples document
   2.701 +I-EXA-EURL-1 Reading examples document from http://tap.roe.ac.uk/vsa/examples
   2.702 +F-EXA-EXNO-1 No examples document at http://tap.roe.ac.uk/vsa/examples
   2.703 +
   2.704 +Totals: Errors: 0; Warnings: 0; Infos: 76; Summaries: 18; Failures: 2
   2.705 +