From 09f86e1656ce3ad394802b13f743d1c7750d4775 Mon Sep 17 00:00:00 2001 From: Maho Sasaki Date: Mon, 9 Nov 2020 20:31:07 -0600 Subject: [PATCH 01/36] prep for production deploy --- docker-compose-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-deploy.yml b/docker-compose-deploy.yml index d6627336..5119b98e 100644 --- a/docker-compose-deploy.yml +++ b/docker-compose-deploy.yml @@ -30,7 +30,7 @@ services: environment: - SUBDOMAINS - URL - - STAGING=true # Keep uncommented for dev, comment out for Production use + # - STAGING=true # Keep uncommented for dev, comment out for Production use volumes: - ./letsencrypt-keys:/config/etc/letsencrypt - ./letsencrypt/healthcheck.sh:/healthcheck.sh From 06a2092f0ada808389e8a4d77caba095a01ade3a Mon Sep 17 00:00:00 2001 From: Maho Sasaki Date: Fri, 11 Jun 2021 12:41:00 -0500 Subject: [PATCH 02/36] add license --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..beb1b352 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 DataJoint Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 4641e13460977ff19f72b1356d07f3a30db0e7f5 Mon Sep 17 00:00:00 2001 From: Maho Sasaki Date: Fri, 11 Jun 2021 12:44:58 -0500 Subject: [PATCH 03/36] remove unnecessary folder --- .../archive/testdev.datajoint.io/cert1.pem | 37 ------ .../archive/testdev.datajoint.io/chain1.pem | 27 ---- .../testdev.datajoint.io/fullchain1.pem | 64 ---------- .../archive/testdev.datajoint.io/privkey1.pem | 52 -------- letsencrypt-keys/csr/0000_csr-certbot.pem | 26 ---- letsencrypt-keys/keys/0000_key-certbot.pem | 52 -------- letsencrypt-keys/live/README | 14 --- .../live/testdev.datajoint.io/README | 14 --- .../live/testdev.datajoint.io/cert.pem | 1 - .../live/testdev.datajoint.io/chain.pem | 1 - .../live/testdev.datajoint.io/fullchain.pem | 1 - .../priv-fullchain-bundle.pem | 116 ------------------ .../live/testdev.datajoint.io/privkey.pem | 1 - .../live/testdev.datajoint.io/privkey.pfx | Bin 5613 -> 0 bytes .../renewal/testdev.datajoint.io.conf | 15 --- 15 files changed, 421 deletions(-) delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem delete mode 100644 letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem delete mode 100644 letsencrypt-keys/csr/0000_csr-certbot.pem delete mode 100644 letsencrypt-keys/keys/0000_key-certbot.pem delete mode 100644 letsencrypt-keys/live/README delete mode 100644 letsencrypt-keys/live/testdev.datajoint.io/README delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/cert.pem delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/chain.pem delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem delete mode 100644 letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem delete mode 120000 letsencrypt-keys/live/testdev.datajoint.io/privkey.pem delete mode 100644 letsencrypt-keys/live/testdev.datajoint.io/privkey.pfx delete mode 100644 letsencrypt-keys/renewal/testdev.datajoint.io.conf diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem deleted file mode 100644 index 3cbaa2a2..00000000 --- a/letsencrypt-keys/archive/testdev.datajoint.io/cert1.pem +++ /dev/null @@ -1,37 +0,0 @@ ------BEGIN CERTIFICATE----- -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 -cKWdJAY= ------END CERTIFICATE----- diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem deleted file mode 100644 index 0002462c..00000000 --- a/letsencrypt-keys/archive/testdev.datajoint.io/chain1.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow -SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT -GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF -q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 -SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 -Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA -a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj -/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T -AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG -CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv -bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k -c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw -VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC -ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz -MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu -Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF -AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo -uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ -wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu -X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG -PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 -KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== ------END CERTIFICATE----- diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem deleted file mode 100644 index 75032878..00000000 --- a/letsencrypt-keys/archive/testdev.datajoint.io/fullchain1.pem +++ /dev/null @@ -1,64 +0,0 @@ ------BEGIN CERTIFICATE----- -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 -cKWdJAY= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow -SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT -GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF -q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 -SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 -Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA -a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj -/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T -AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG -CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv -bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k -c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw -VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC -ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz -MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu -Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF -AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo -uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ -wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu -X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG -PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 -KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== ------END CERTIFICATE----- diff --git a/letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem b/letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem deleted file mode 100644 index 51a94970..00000000 --- a/letsencrypt-keys/archive/testdev.datajoint.io/privkey1.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -LihchMCL8vDrMavUwxYPydxwALUrvA== ------END PRIVATE KEY----- diff --git a/letsencrypt-keys/csr/0000_csr-certbot.pem b/letsencrypt-keys/csr/0000_csr-certbot.pem deleted file mode 100644 index 0f5e8268..00000000 --- a/letsencrypt-keys/csr/0000_csr-certbot.pem +++ /dev/null @@ -1,26 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEdzCCAl8CAQIwADCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANYc -OLX6AHxRpUKdq/BCwfaVSF0R+384mqM6x2p0LaOJCC0GzJgV656Haui+JloOWjzM -NV9bmuMN90MpvlBUmFXH9xBrXy/SsuciA4DbVV1RKHpI4RhbclmUveJyDa4LFHHI -nOo7cOso9zS9EwJ9iVAwXMxKznpgwLNzGbs/PqEsvSYW9QIpv1u81I/zFYarVBV8 -903DkCkT6pV9PHLn+wO9DLxluOt+AxNAiel1bj6PvZIgaRBWsUCaUxUH9bT8br9p -cKbXuS7vv52BRxi+ZmMK2F3qKzgz4dxPI6Nm6bUsrhpILP8lNR94wRLQNtonJ8nl -oNs1J5E4c9vY2In3hF7rHLBet1T1AmVCn1xOoeU6kE64Y6Vs/A/kVcI40bkZHUiE -FlO9Ew0EeY6omK8Ip8hKmeThl935/E48PHzA2No1hn5sn+YojNRiOhxp3gTZ9Khq -HU1ooDqrOeAgcgb2GOm2OzuwHdhtoxugM0Fk9GvJqWR1C5oY7J0nt6UrR8A0/Ixw -MNuCzMU4FTprQJqCDLTnklGLuwRkDRiuEieA9su6qdZQXxcbSnxp97lz5aEiotfA -jYdZdgl5rQyVOFerpQd4bNG76lh1NvVq+SFCztCSOapb68oyW9TL7YbuD6bOvTOx -TZ1U4w98wn5tXFei3/lJDeK3zlvyjeeLpxyhj1ffAgMBAAGgMjAwBgkqhkiG9w0B -CQ4xIzAhMB8GA1UdEQQYMBaCFHRlc3RkZXYuZGF0YWpvaW50LmlvMA0GCSqGSIb3 -DQEBCwUAA4ICAQBsStP169iWOrPwDJQUCgTuJaJSbY4ykN/ldm9CLSOKOGxB6pVu -MI91DFhSzwE55cGYsUd5dWEY+dFYym9/FLRccmbSpv9iD60/RA3LScZ8Cxf44NEv -eNiGCToT7YweQq7VHlDIIOzeaXQEzSDwOgEjAzn/t7UrENZBF7gf1vlZlTlv71Ak -EK/JXpzdJalvsjYKWqhBecwnJ1ALc8eYlBMZ5x9NJpWA5j/1aq9QNSYvpSRx5U0g -nKBhONUuS6N0bGWK9yVwPGrE2E4qNfyM4my1w8AmmrPyGYwtJpZzJzWPZ6YdQ4aN -PMKa4vGzf9ZSuK6EE2t+z4nvstCdKHhx/jI0OwUZVqqotkm2MWd4yKbC5a5qWnkx -Xg9SdOj5QulBnp9FhUIx0IRJj1/spb+CX7KNmPkv7e1O1Gg/OeNWXygtfGA3WEi7 -AuJxYnGTHhX9Ijpw9B+STUN+uS/3uPNq5JtPdwbxA3TDYOGECj2620j5WlY/qzDf -Y7WA4ZZKGMaTyaJggvWItwKk8PwHkPpZMRxyVQzZIBxB9LbRiibD/Oldygt48eI2 -F0HNVbBFLSG8EtZLPT0UeXzNqJ/21XsXHYxjrHqaeBaWX0YmjqAQytG+Q+hvdV6O -TTieZ5+zGeeBOdCATvzmQ73sGqT1Kj3JQWMJDKFmteRPmFPNDUIMnNTSYQ== ------END CERTIFICATE REQUEST----- diff --git a/letsencrypt-keys/keys/0000_key-certbot.pem b/letsencrypt-keys/keys/0000_key-certbot.pem deleted file mode 100644 index 51a94970..00000000 --- a/letsencrypt-keys/keys/0000_key-certbot.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -LihchMCL8vDrMavUwxYPydxwALUrvA== ------END PRIVATE KEY----- diff --git a/letsencrypt-keys/live/README b/letsencrypt-keys/live/README deleted file mode 100644 index 00b733c7..00000000 --- a/letsencrypt-keys/live/README +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains your keys and certificates. - -`[cert name]/privkey.pem` : the private key for your certificate. -`[cert name]/fullchain.pem`: the certificate file used in most server software. -`[cert name]/chain.pem` : used for OCSP stapling in Nginx >=1.3.7. -`[cert name]/cert.pem` : will break many server configurations, and should not be used - without reading further documentation (see link below). - -WARNING: DO NOT MOVE OR RENAME THESE FILES! - Certbot expects these files to remain in this location in order - to function properly! - -We recommend not moving these files. For more information, see the Certbot -User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates. diff --git a/letsencrypt-keys/live/testdev.datajoint.io/README b/letsencrypt-keys/live/testdev.datajoint.io/README deleted file mode 100644 index 5050078f..00000000 --- a/letsencrypt-keys/live/testdev.datajoint.io/README +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains your keys and certificates. - -`privkey.pem` : the private key for your certificate. -`fullchain.pem`: the certificate file used in most server software. -`chain.pem` : used for OCSP stapling in Nginx >=1.3.7. -`cert.pem` : will break many server configurations, and should not be used - without reading further documentation (see link below). - -WARNING: DO NOT MOVE OR RENAME THESE FILES! - Certbot expects these files to remain in this location in order - to function properly! - -We recommend not moving these files. For more information, see the Certbot -User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates. diff --git a/letsencrypt-keys/live/testdev.datajoint.io/cert.pem b/letsencrypt-keys/live/testdev.datajoint.io/cert.pem deleted file mode 120000 index bab4ce48..00000000 --- a/letsencrypt-keys/live/testdev.datajoint.io/cert.pem +++ /dev/null @@ -1 +0,0 @@ -../../archive/testdev.datajoint.io/cert1.pem \ No newline at end of file diff --git a/letsencrypt-keys/live/testdev.datajoint.io/chain.pem b/letsencrypt-keys/live/testdev.datajoint.io/chain.pem deleted file mode 120000 index c9e5f6e5..00000000 --- a/letsencrypt-keys/live/testdev.datajoint.io/chain.pem +++ /dev/null @@ -1 +0,0 @@ -../../archive/testdev.datajoint.io/chain1.pem \ No newline at end of file diff --git a/letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem b/letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem deleted file mode 120000 index b261b995..00000000 --- a/letsencrypt-keys/live/testdev.datajoint.io/fullchain.pem +++ /dev/null @@ -1 +0,0 @@ -../../archive/testdev.datajoint.io/fullchain1.pem \ No newline at end of file diff --git a/letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem b/letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem deleted file mode 100644 index 415fd30f..00000000 --- a/letsencrypt-keys/live/testdev.datajoint.io/priv-fullchain-bundle.pem +++ /dev/null @@ -1,116 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDWHDi1+gB8UaVC -navwQsH2lUhdEft/OJqjOsdqdC2jiQgtBsyYFeueh2roviZaDlo8zDVfW5rjDfdD -Kb5QVJhVx/cQa18v0rLnIgOA21VdUSh6SOEYW3JZlL3icg2uCxRxyJzqO3DrKPc0 -vRMCfYlQMFzMSs56YMCzcxm7Pz6hLL0mFvUCKb9bvNSP8xWGq1QVfPdNw5ApE+qV -fTxy5/sDvQy8ZbjrfgMTQInpdW4+j72SIGkQVrFAmlMVB/W0/G6/aXCm17ku77+d -gUcYvmZjCthd6is4M+HcTyOjZum1LK4aSCz/JTUfeMES0DbaJyfJ5aDbNSeROHPb -2NiJ94Re6xywXrdU9QJlQp9cTqHlOpBOuGOlbPwP5FXCONG5GR1IhBZTvRMNBHmO -qJivCKfISpnk4Zfd+fxOPDx8wNjaNYZ+bJ/mKIzUYjocad4E2fSoah1NaKA6qzng -IHIG9hjptjs7sB3YbaMboDNBZPRryalkdQuaGOydJ7elK0fANPyMcDDbgszFOBU6 -a0Caggy055JRi7sEZA0YrhIngPbLuqnWUF8XG0p8afe5c+WhIqLXwI2HWXYJea0M -lThXq6UHeGzRu+pYdTb1avkhQs7QkjmqW+vKMlvUy+2G7g+mzr0zsU2dVOMPfMJ+ -bVxXot/5SQ3it85b8o3ni6ccoY9X3wIDAQABAoICAClGg4BBU7qjmrI+5xiIJhA9 -MxgOEWezJ8xz1mGlR+8Qyay0dNiU0TlcbbW0gnw17BtwWpGpfTBsTtB5yaB+zmcr -B2v45v63JZn9KqO6pLg6nw0D47DoYCD41apDxnNY23Yb8HQPRXNwEEfwcyu1u7Tj -vd/8Q9W/tSZi+ADq7k3v6/7dyhnCposu2eNuPyYY/TqvPpWVL8NbfYuX+wFDy1Yr -Kbtf+MgdIMajWHLTGo+g8jCrYtWtgLothfq18B4V09u+neLsD10HBu98LpKMkfxh -6Ngh/nb1OYNZFku32TH+DQowA8ykBZutkbrovMpNZhQ72kin9JrAQUWOhiACwVeY -tb9rhCBPYYBgJ9zYlP/Xd5ZKk3LEAu8/dVsKHhLqxXnkNdaKLj0dliqBiU5Or7XG -dfWPZmcf5dl5LAMfIzek6K4RTM6CTddWSOuxLqgMXacM2m8ZE3w87jv59nkY07SF -Xm3nWzLYketDMt5VJ/ozkiyYE5GRvEFz11fM6SqCN5bO1rli1oZ/hOKK82cC8Y0s -pwdCgQGO4ksA+bbxLhC8xux4uCdgLupyJrLOR9AmE/Gs/Y8FurBxR04kqbefW7Fp -hdNm5WJtvM5/jF3k6iJWLO4JmlSxvW86Ie7sYGShD+SqZ1+Gq03LBKnSfycBg0mP -/3kDjRle36Ndh8DkdEoRAoIBAQDyPE0EmjpmwT/aMhbMDNYdKtg2S/FUsO2igzHl -uCGrvDAQDowgaK6RTV5+B7vifUe5Gb573r1+Cd30ziwQxyVGFvmHXtdVMuRBF8G5 -U57rk5+9KADp/riRP3xzANOicHnkh8fSazsINEr3AhA23hliYX+g2lZoGnDZUost -0cwkOpe+d2cZBXFrf/o0HsE6rfyFBzbUXe/DAiS7x6MToP2O8KxPPHRFmdr0JwkT -/AUfrUP3BUI3j4vYZrIGKpxZgs5lMYzRio88somuPSiJDCAckSmaRgsYXURPFs2g -MAhIxp0PdVISG8NuTzSmTNRjKaiYNDdFx1BYU+Wb0dp50hRjAoIBAQDiRssnJEfA -bc9ra8B0pQR82Hq4MxJT6aTxsPU+cywt8uSgnS6rCUtI60OqRB3SmhmrpRvfqlMN -0b9IfrjbD1coFXOXbWWRfXx3h4wMM8+FI+SEPY6PriqEbd5s6pf3SLAm6DDsD9ws -zZuXHXc1LEJdTc6oBCqo9mtcrzCEZCym0mNxIttwJJcSGMuqyxWS5fOhEfmoKT9D -omYz7Y2mF1ENIiP5Lfs20ucPv6YaEw7xu+oWdyCiIQv01/lMT5R5vbQ1KrdN+FaC -vC3jVm0CDrr9bwiL+/A3k1Bs7eIRDvkmRZQIVVEYfld6ZrVPFc3iLFgpeVHnWMRH -K1UctnNO/BFVAoIBAQDdDnh+jbxkD1EU7wbs2X4AChxbmHw4fGmwF6fOanWXwlne -HVh1LvK3uPJVcvtb2lY8riit4/vrbFe4UvnVqdbzGn5Gsh8yKgow+NwaIxxxATwS -I9KJt6F5M4V/ca6wm5IxIlQRSzgI6afLuH9RgueJZ05QXU/jGtYHDRPkEYQJP8tA -zrgwFk6F+rk7HSHbSfGa+JVpwfvOa0NYdfv1KsKZ0jp86L920MwGaSUYrrGCUd0n -LQ5bo8zMBBPMGtCpwvxVTp2ij57dllScxEUcpAsd5r8fgXIYnux6fGXUHGFDALVN -6ROnYNy86t0yMgTUJa0skOIr9JL2uEFeLGkDKNrfAoIBAFGsKdGj974OJKrqRpoT -oe4KGSl5Tak6EQ4nyC1VVuHy5PDQKzMS9LiKKm8/jOAiPRfGTaxKhxXa2kcpbkGr -ZNMUAxfqJZoBCDcAlt0kqketL+NHcLiNrc0E9x6rAlUASIySjG34P4lwYTOHMCri -IcYZunjMoDVCVHgsx79RhQhlsfz5DumIW3rttj2cddoC5BAEM++ti6c269rcaJ9F -lTy/UOq03RLpxvrZOvP4YxF/uTuInh/G+9DRT6tqofXbMjtqgqVC+L7Re2KuJER0 -2qt1M0mLkyYMJyBaMJnlpKpavNbRLKdBmwOUJOc5wIldZij6IET3tkjV7C+j7zTY -KM0CggEAFx1MY1EPfOmeXcmZ4TLZcT7xajOLK7a+fQmTXD+H7GVRjAkK5ftzqvMV -PBQqlRhh2ewCQySERwj29kioUgQX1WCOHfLN68NLW54Mke99PB2cZk75Vq5hqytu -uWLyB89bR40jsdgtv3g47ItX93GbYUZlOlHkOpPKu6hAZLG7o8VDa5bU5Dfczflx -FTjzR+IjbG43goGCkmNgYL9tNIJzRGEFI16iy44QRS+eqJCUQeShy6zS7EvG2/TL -LKS//B2u9NCADW2ia1u10Kx4rxQUu6+zUOA4Xv+NEtu4uwV0WkuOGkiYkJFlGEpg -LihchMCL8vDrMavUwxYPydxwALUrvA== ------END PRIVATE KEY----- ------BEGIN CERTIFICATE----- -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 -cKWdJAY= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow -SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT -GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF -q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8 -SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0 -Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA -a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj -/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T -AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG -CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv -bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k -c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw -VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC -ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz -MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu -Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF -AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo -uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/ -wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu -X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG -PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6 -KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg== ------END CERTIFICATE----- diff --git a/letsencrypt-keys/live/testdev.datajoint.io/privkey.pem b/letsencrypt-keys/live/testdev.datajoint.io/privkey.pem deleted file mode 120000 index f819d687..00000000 --- a/letsencrypt-keys/live/testdev.datajoint.io/privkey.pem +++ /dev/null @@ -1 +0,0 @@ -../../archive/testdev.datajoint.io/privkey1.pem \ No newline at end of file diff --git a/letsencrypt-keys/live/testdev.datajoint.io/privkey.pfx b/letsencrypt-keys/live/testdev.datajoint.io/privkey.pfx deleted file mode 100644 index ace7291f0477a2e77d367c90530ecf4feb03f56d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5613 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 CkIgm! diff --git a/letsencrypt-keys/renewal/testdev.datajoint.io.conf b/letsencrypt-keys/renewal/testdev.datajoint.io.conf deleted file mode 100644 index 4ffdca1b..00000000 --- a/letsencrypt-keys/renewal/testdev.datajoint.io.conf +++ /dev/null @@ -1,15 +0,0 @@ -# renew_before_expiry = 30 days -version = 0.38.0 -archive_dir = /etc/letsencrypt/archive/testdev.datajoint.io -cert = /etc/letsencrypt/live/testdev.datajoint.io/cert.pem -privkey = /etc/letsencrypt/live/testdev.datajoint.io/privkey.pem -chain = /etc/letsencrypt/live/testdev.datajoint.io/chain.pem -fullchain = /etc/letsencrypt/live/testdev.datajoint.io/fullchain.pem - -# Options used in the renewal process -[renewalparams] -account = b78f9f453ca52340095dbede9324c9fe -rsa_key_size = 4096 -pref_challs = http-01, -server = https://acme-v02.api.letsencrypt.org/directory -authenticator = standalone From 44d456b155f3e7fb9b7f524c61a102a19fd82f25 Mon Sep 17 00:00:00 2001 From: mahos Date: Fri, 11 Jun 2021 13:29:36 -0500 Subject: [PATCH 04/36] Update docker-compose-deploy.yml Co-authored-by: Raphael Guzman <38401847+guzman-raphael@users.noreply.github.com> --- docker-compose-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-deploy.yml b/docker-compose-deploy.yml index 5119b98e..d6627336 100644 --- a/docker-compose-deploy.yml +++ b/docker-compose-deploy.yml @@ -30,7 +30,7 @@ services: environment: - SUBDOMAINS - URL - # - STAGING=true # Keep uncommented for dev, comment out for Production use + - STAGING=true # Keep uncommented for dev, comment out for Production use volumes: - ./letsencrypt-keys:/config/etc/letsencrypt - ./letsencrypt/healthcheck.sh:/healthcheck.sh From b81a9b654ccd5b87075537f3dbcfa789d6c0f0af Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Thu, 21 Oct 2021 11:41:16 -0500 Subject: [PATCH 05/36] Saving work in progress --- backend/iblapi.py | 31 +++++++++++++++---- ibl-frontend/dev.dockerfile | 4 ++- .../src/environments/environment.prod.ts | 2 +- node_server/app.js | 20 +++++++++++- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/backend/iblapi.py b/backend/iblapi.py index b20e5c8f..f0554cc7 100644 --- a/backend/iblapi.py +++ b/backend/iblapi.py @@ -168,13 +168,15 @@ def do_req(subpath): pathparts = request.path.split('/')[2:] # ['', 'v0'] [ ... ] obj = pathparts[0] values = request.values + print(f"\n\n\n\nValues: {values}\n\n\n\n") postargs, jsonargs = {}, None # construct kwargs kwargs = {'as_dict': True} - limit = int(request.values['__limit']) if '__limit' in values else None - order = request.values['__order'] if '__order' in values else None + limit = int(request.values['__limit']) if '__limit' in values else 25 + order = request.values['__order'] if '__order' in values else 'KEY ASC' + page = int(request.values['__page']) if '__page' in values else 1 proj = json.loads(request.values['__proj']) if '__proj' in values else None - special_fields = ['__json', '__limit', '__order', '__proj', '__json_kwargs'] + special_fields = ['__json', '__limit', '__order', '__proj', '__json_kwargs', '__page'] for a in (v for v in values if v not in special_fields): # HACK: 'uuid' attrs -> UUID type (see also: datajoint-python #594) postargs[a] = UUID(values[a]) if 'uuid' in a else values[a] @@ -188,9 +190,10 @@ def do_req(subpath): args = {} if not args else dj.AndList(args) kwargs = {k: v for k, v in (('as_dict', True,), ('limit', limit,), - ('order_by', order,)) if v is not None} + ('order_by', order,), + ('offset', (page-1)*limit)) if v is not None} # 2) and dispatch - app.logger.debug("args: '{}', kwargs: {}".format(args, kwargs)) + app.logger.info("args: '{}', kwargs: {}".format(args, kwargs)) if obj not in reqmap: abort(404) elif obj == '_q': @@ -209,12 +212,15 @@ def do_req(subpath): return dumps(fetched) # return dumps(q.fetch(**kwargs)) +# def handle_q(subpath, args, proj, fetch_args=None, limit: int = 10, page: int = 1, **kwargs): def handle_q(subpath, args, proj, fetch_args=None, **kwargs): ''' special queries (under '/_q/ URL Space) - for sessionpage, provide: ((session * subject * lab * user) & arg).proj(flist) ''' + + app.logger.info("\n\n\nthe value for limit is: {}\n\n\n".format(request.args)) app.logger.info("handle_q: subpath: '{}', args: {}".format(subpath, args)) app.logger.info('key words: {}'.format(kwargs)) @@ -267,9 +273,22 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs): q = ((acquisition.Session() * sess_proj * psych_curve * ephys_data * subject.Subject() * subject.SubjectLab() * subject.SubjectUser() * trainingStatus) & args & brain_restriction) + # newLimit = int(request.args.get("limit", 10)) + # page = int(request.args.get("page", 1)) + + app.logger.info('\n\n\n\n\nFetch Args: {}\n\n\n\n'.format(fetch_args)) + q = q.proj(*proj) if proj else q + dj.conn().query("SET SESSION max_join_size={}".format('18446744073709551615')) - q = q.proj(*proj).fetch(**fetch_args) if proj else q.fetch(**fetch_args) + # q = q.proj(*proj).fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args) if proj else q.fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args) + + ret_count = len(q) + + ret = q.fetch(**fetch_args) + dj.conn().query("SET SESSION max_join_size={}".format(original_max_join_size)) + + return dumps({"records_count": ret_count, "records": ret}) elif subpath == 'subjpage': proj_restr = None for e in args: diff --git a/ibl-frontend/dev.dockerfile b/ibl-frontend/dev.dockerfile index bf40ba09..7d13a0a0 100644 --- a/ibl-frontend/dev.dockerfile +++ b/ibl-frontend/dev.dockerfile @@ -14,7 +14,9 @@ RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] # CMD tail -f /dev/null -CMD ["/app/node_modules/@angular/cli/bin/ng","serve","--host","0.0.0.0","--port","9000","--disable-host-check"] +# CMD ["/app/node_modules/@angular/cli/bin/ng","serve","--host","0.0.0.0","--port","9000","--disable-host-check"] + +CMD ["node", "--max_old_space_size=5120", "/app/node_modules/@angular/cli/bin/ng","serve","--host","0.0.0.0","--port","9000","--disable-host-check"] WORKDIR /app diff --git a/ibl-frontend/frontend-content/src/environments/environment.prod.ts b/ibl-frontend/frontend-content/src/environments/environment.prod.ts index e0dc2ff6..0f9c6cf1 100644 --- a/ibl-frontend/frontend-content/src/environments/environment.prod.ts +++ b/ibl-frontend/frontend-content/src/environments/environment.prod.ts @@ -1,6 +1,6 @@ export const environment = { production: true, // api_url: '$PROD_NODE_API', - backend_url: '$PROD_NODE_BACKEND' + backend_url: 'https://fakeservices.datajoint.io/api' }; // before deploying, make sure backend_url part is backend_url: '(dollar)PROD_NODE_BACKEND' \ No newline at end of file diff --git a/node_server/app.js b/node_server/app.js index 222c31a6..63dfbffe 100644 --- a/node_server/app.js +++ b/node_server/app.js @@ -191,8 +191,19 @@ app.get('/sessions', checkAuth, (req, res) => { app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => { // console.log('posting to filter session page'); - console.log('req.body: ', req.body) + console.log('\n\n\n\nreq.body: \n\n\n\n', req.body) console.log('type: ', typeof req.body) + console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0]) + console.log('\n\n\n\npage value\n\n\n', req.query.__page[0]) + console.log('\n\n\n\norder value\n\n\n', req.query.__order) + console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params) + // res.append('__limit', req.query.__limit[0]) + // res.append('__page', req.query.__page[0]) + // res.append('__order', req.body) + res.set({ + '__limit': req.query.__limit[0], + '__page': req.query.__page[0] + }) request.post(flask_backend + '/v0/_q/sessionpage', { form: req.body }, function (error, httpResponse, body) { if (error) { console.error('error [session list fetch]: ', error); @@ -200,6 +211,13 @@ app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => { return; } // console.log(body); + // res.append('__limit', req.query.__limit[0]) + // res.append('__page', req.query.__page[0]) + // res.append('__order', req.body) + // res.set({ + // '__limit': req.query.__limit[0], + // '__page': req.query.__page[0] + // }) res.send(body); }) }) From dde5c6be37f8fe99246efbb5b4bc46110ec87a9d Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 25 Oct 2021 10:03:09 -0500 Subject: [PATCH 06/36] Records in allSessions --- .../app/session-list/session-list.component.ts | 4 ++++ node_server/app.js | 17 +++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 16b25eb4..ebe29e9a 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -363,8 +363,12 @@ export class SessionListComponent implements OnInit, OnDestroy { // Add the default sorting for the api request filters['__order'] = 'session_start_time DESC'; + // filters['__page'] = this.pageIndex + // filters['__limit'] = this.pageSize this.allSessions = await this.allSessionsService.fetchSessions(filters).toPromise(); + this.allSessions = this.allSessions['records']; + //record count json and assign it here } setDropDownFormOptions(dropDownMenuOptionKey, formControl: AbstractControl, key: string) { diff --git a/node_server/app.js b/node_server/app.js index 63dfbffe..0eda4dcf 100644 --- a/node_server/app.js +++ b/node_server/app.js @@ -193,17 +193,18 @@ app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => { // console.log('posting to filter session page'); console.log('\n\n\n\nreq.body: \n\n\n\n', req.body) console.log('type: ', typeof req.body) - console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0]) - console.log('\n\n\n\npage value\n\n\n', req.query.__page[0]) - console.log('\n\n\n\norder value\n\n\n', req.query.__order) - console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params) + // console.log('\n\n\n\nlimit value\n\n\n', req.query) + // console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0]) + // console.log('\n\n\n\npage value\n\n\n', req.query.__page[0]) + // console.log('\n\n\n\norder value\n\n\n', req.query.__order) + // console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params) // res.append('__limit', req.query.__limit[0]) // res.append('__page', req.query.__page[0]) // res.append('__order', req.body) - res.set({ - '__limit': req.query.__limit[0], - '__page': req.query.__page[0] - }) + // res.set({ + // '__limit': req.query.__limit[0], + // '__page': req.query.__page[0] + // }) request.post(flask_backend + '/v0/_q/sessionpage', { form: req.body }, function (error, httpResponse, body) { if (error) { console.error('error [session list fetch]: ', error); From 297b89745170093c84bbe8f49c54545bbcbb01d2 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Tue, 26 Oct 2021 10:02:04 -0500 Subject: [PATCH 07/36] Paging works, but sorting doesn't. --- .../app/session-list/GithubApiInterface.ts | 6 +++ .../app/session-list/GithubIssueInterface.ts | 20 ++++++++ .../app/session-list/all-sessions.service.ts | 11 +++- .../session-list/session-list.component.html | 5 +- .../session-list/session-list.component.ts | 50 +++++++++++++++++-- 5 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts create mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts new file mode 100644 index 00000000..7cbb7405 --- /dev/null +++ b/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts @@ -0,0 +1,6 @@ +import { GithubIssue } from "./GithubIssueInterface"; + +export interface GithubApi { + records: GithubIssue[]; + records_count: number; + } \ No newline at end of file diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts new file mode 100644 index 00000000..83cf47f0 --- /dev/null +++ b/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts @@ -0,0 +1,20 @@ +export interface GithubIssue { + mouse_id: number; + session_date: string; + session_lab: string; + subject_nickname: string; + subject_birth_date: string; + session_start_time: string; + task_protocol: string; + subject_line: string; + responsible_user: string; + session_uuid: string; + sex: string; + subject_uuid: string; + nplot: string; + nprobe: string; + session_project: string; + good4bmap: string; + } + + \ No newline at end of file diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index 167183d8..0b2530fa 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -1,6 +1,8 @@ import { Injectable } from '@angular/core'; -import { Subject } from 'rxjs'; +import { Subject, Observable } from 'rxjs'; import { HttpClient } from '@angular/common/http'; +import { GithubApi } from './GithubApiInterface'; +import { GithubIssue } from './GithubIssueInterface'; import { environment } from '../../environments/environment'; @@ -36,6 +38,13 @@ export class AllSessionsService { return this.http.post(BACKEND_API_URL + '/sessions/', sessionFilters, { responseType: 'json'}) } + getRepoIssues(body: Object): Observable { + const requestUrl = 'https://fakeservices.datajoint.io/api/sessions'; + + + return this.http.post(requestUrl, body, { responseType: 'json' }); + } + getAllSessions() { let start = new Date(); this.http.get(BACKEND_API_URL + `/sessions`) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 8ef7302e..09fdae3a 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -238,7 +238,7 @@

- +
@@ -321,7 +321,8 @@

Lab
- diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index ebe29e9a..13946acb 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -1,8 +1,9 @@ import { Component, OnInit, OnDestroy, ViewChild, Input } from '@angular/core'; +import {HttpClient} from '@angular/common/http'; import { FormControl, FormGroup, FormArray, AbstractControl} from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; -import { Subscription, Observable } from 'rxjs'; -import { map, startWith } from 'rxjs/operators'; +import { Subscription, Observable, merge, of as observableOf } from 'rxjs'; +import { map, startWith, catchError, switchMap } from 'rxjs/operators'; import { MatTreeNestedDataSource } from '@angular/material/tree'; import { MatPaginator} from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; @@ -12,6 +13,7 @@ import { FilterStoreService } from '../filter-store.service'; import * as moment from 'moment'; import * as _ from 'lodash'; import { NestedTreeControl } from '@angular/cdk/tree'; +import { GithubIssue } from './GithubIssueInterface'; enum Sex { @@ -112,12 +114,18 @@ export class SessionListComponent implements OnInit, OnDestroy { selectedSession = {}; + exampleDatabase: AllSessionsService | null; + data: GithubIssue[] = []; + resultsLength = 0; + isLoadingResults = true; + isRateLimitReached = false; + private sessionsSubscription: Subscription; private sessionMenuSubscription: Subscription; private allSessionMenuSubscription: Subscription; private reqSessionsSubscription: Subscription; - constructor(private route: ActivatedRoute, private router: Router, public allSessionsService: AllSessionsService, public filterStoreService: FilterStoreService) { + constructor(private route: ActivatedRoute, private router: Router, public allSessionsService: AllSessionsService, public filterStoreService: FilterStoreService, private _httpClient: HttpClient) { this.treeDataSource.data = this.brainRegionTree // Initalized the material table this.dataSource = new MatTableDataSource(); @@ -322,6 +330,41 @@ export class SessionListComponent implements OnInit, OnDestroy { this.buildLookup(); }) } + + ngAfterViewInit() { + this.exampleDatabase = new AllSessionsService(this._httpClient); + + // If the user changes the sort order, reset back to the first page. + this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0); + + merge(this.sort.sortChange, this.paginator.page) + .pipe( + startWith({}), + switchMap(() => { + this.isLoadingResults = true; + return this.exampleDatabase!.getRepoIssues( + {"__page": this.paginator.pageIndex + 1}) + .pipe(catchError(() => observableOf(null))); + }), + map(data => { + // Flip flag to show that loading has finished. + this.isLoadingResults = false; + this.isRateLimitReached = data === null; + + if (data === null) { + return []; + } + + // Only refresh the result length if there is new data. In case of rate + // limit errors, we do not want to reset the paginator to zero, as that + // would prevent users from re-triggering requests. + this.resultsLength = data.records_count; + console.log("data githubIssue" + data.records) + console.log("length " + this.resultsLength) + return data.records; + }) + ).subscribe(data => this.data = data); + } ngOnDestroy() { // Store paginator, sort, buttons, and sessions @@ -368,6 +411,7 @@ export class SessionListComponent implements OnInit, OnDestroy { this.allSessions = await this.allSessionsService.fetchSessions(filters).toPromise(); this.allSessions = this.allSessions['records']; + console.log("\n\n\n\nSESSIONS: " + this.allSessions + " \n\n\n\n") //record count json and assign it here } From f58e7b8e7fb86d779551240e7e8a4dc977bfbb75 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Wed, 27 Oct 2021 15:49:17 -0500 Subject: [PATCH 08/36] Paging, filtering, sorting completed (minus range) --- backend/iblapi.py | 14 ++- .../session-list/session-list.component.ts | 119 +++++++++++++++++- 2 files changed, 123 insertions(+), 10 deletions(-) diff --git a/backend/iblapi.py b/backend/iblapi.py index f0554cc7..e447b50d 100644 --- a/backend/iblapi.py +++ b/backend/iblapi.py @@ -172,7 +172,7 @@ def do_req(subpath): postargs, jsonargs = {}, None # construct kwargs kwargs = {'as_dict': True} - limit = int(request.values['__limit']) if '__limit' in values else 25 + limit = int(request.values['__limit']) if '__limit' in values else None order = request.values['__order'] if '__order' in values else 'KEY ASC' page = int(request.values['__page']) if '__page' in values else 1 proj = json.loads(request.values['__proj']) if '__proj' in values else None @@ -188,10 +188,14 @@ def do_req(subpath): if '__json_kwargs' in values: json_kwargs = json.loads(request.values['__json_kwargs']) args = {} if not args else dj.AndList(args) - kwargs = {k: v for k, v in (('as_dict', True,), - ('limit', limit,), - ('order_by', order,), - ('offset', (page-1)*limit)) if v is not None} + if limit == None: + kwargs = {k: v for k, v in (('as_dict', True,), + ('order_by', order,)) if v is not None} + else: + kwargs = {k: v for k, v in (('as_dict', True,), + ('limit', limit,), + ('order_by', order,), + ('offset', (page-1)*limit)) if v is not None} # 2) and dispatch app.logger.info("args: '{}', kwargs: {}".format(args, kwargs)) if obj not in reqmap: diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 13946acb..20f79d83 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -179,6 +179,7 @@ export class SessionListComponent implements OnInit, OnDestroy { if (key === '__json') { // If key is __json than to reformat to IBL API format const JSONcontent = JSON.parse(params[key]); + const dateRange = ['', '']; // First value is start date, second value is end date // Loop through each item in JSON Content and figgure out it is a date or a gender @@ -252,6 +253,10 @@ export class SessionListComponent implements OnInit, OnDestroy { } } + + + + // Check storage to see if there is anything there // Check for paginator if (this.filterStoreService.sessionPaginator) { @@ -287,10 +292,12 @@ export class SessionListComponent implements OnInit, OnDestroy { // Check for preloaded sessions if (this.filterStoreService.loadedSessions) { // We have previously loaded sessions, thus just use that + console.log(this.filterStoreService.loadedSessions); this.allSessions = this.filterStoreService.loadedSessions; } else { // Else fetch from database + console.log('in ngOnIt fetchSessions') await this.fetchSessions(); this.initialLoad = false; } @@ -298,17 +305,20 @@ export class SessionListComponent implements OnInit, OnDestroy { // Check if there are params, if they are then apply them via this.applyFilter(); if (params !== undefined && Object.keys(params).length !== 0) { // There are params, thus apply the filter and get the restricted sessions + console.log(params) this.restrictedSessions = await this.applyFilter(); + console.log(this.restrictedSessions) } else { // There are no params so just set restricted Session to all sessions + console.log(this.restrictedSessions) this.restrictedSessions = this.allSessions } // Create Menu, Update table view and set loading to false this.createMenu(this.restrictedSessions); - this.updateTableView(this.restrictedSessions); + //this.updateTableView(this.restrictedSessions); this.isLoading = false; if (this.filterStoreService.sessionPaginator) { @@ -318,6 +328,7 @@ export class SessionListComponent implements OnInit, OnDestroy { this.dataSource.paginator = this.paginator } + console.log("update selection") this.updateSelection(); }); @@ -337,13 +348,83 @@ export class SessionListComponent implements OnInit, OnDestroy { // If the user changes the sort order, reset back to the first page. this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0); + let newObject = {}; + merge(this.sort.sortChange, this.paginator.page) .pipe( startWith({}), switchMap(() => { + if(this.sort.direction == ''){ + this.sort.active = 'session_start_time'; + this.sort.direction = 'desc' + } + let filter = Object.assign({}, this.session_filter_form.getRawValue()); + console.log(`filter: ${JSON.stringify(filter)}`); + let newFilter = JSON.stringify(filter) + console.log(Object.entries(filter)) + + for (const [key, value] of Object.entries(filter)) { + if(key == 'sex'){ + console.log("\n\ntypeof sex", typeof(value)) + if(value[0] == true){ + newObject[key] = 'F' + //female + continue + } + else if (value[1] == true){ + newObject[key] = 'M' + //male + continue + } + else if (value[2] == true){ + newObject[key] = 'U' + //undefined + continue + } + else{ + continue + } + + // for( const [key2, val] of Object.entries(value)){ + // console.log("inside sex value") + // console.log(`${key2}: ${val}`) + // if(val == 'true') + // console.log(`\n\nSex Value: ${val}\n\n`) + // console.log(`\n\nkey2`) + // newObject[key2] = val + // continue + // } + } + if(key == 'session_range_filter'){ + console.log("\n\ntypeof of session_range_filter ", typeof(value)) + for( const [key2, val] of Object.entries(value)){ + console.log("inside session_range_filter value") + console.log(`${key2}: ${val}`) + if(val !== null){ + newObject[key2] = val + } + continue + } + } + if(value !== null){ + newObject[key] = value + } + + console.log(`${key}: ${value}`); + } + + for (const [key, value] of Object.entries(newObject)){ + console.log('\n\nwithin new list\n\n') + console.log(`${key}: ${value}`) + } + console.log(typeof(filter)); this.isLoadingResults = true; + + newObject["__page"] = this.paginator.pageIndex + 1; + newObject["__limit"] = this.paginator.pageSize; + newObject["__order"] = this.sort.active + ' ' + this.sort.direction return this.exampleDatabase!.getRepoIssues( - {"__page": this.paginator.pageIndex + 1}) + newObject) .pipe(catchError(() => observableOf(null))); }), map(data => { @@ -355,6 +436,18 @@ export class SessionListComponent implements OnInit, OnDestroy { return []; } + // if (this.applyFilter()){ + // const restrictedSessions = this.applyFilter(); + // data.records = restrictedSessions; + // return data.records; + // } + + // this.restrictedSessions = await this.applyFilter(); + // this.createMenu(this.restrictedSessions); + // await this.updateTableView(this.restrictedSessions); + + + // Only refresh the result length if there is new data. In case of rate // limit errors, we do not want to reset the paginator to zero, as that // would prevent users from re-triggering requests. @@ -365,6 +458,12 @@ export class SessionListComponent implements OnInit, OnDestroy { }) ).subscribe(data => this.data = data); } + + // async pagedTableData(){ + // const restrictedSessions = await this.applyFilter(); + // this.data.records = restrictedSessions; + // return data.records; + // } ngOnDestroy() { // Store paginator, sort, buttons, and sessions @@ -400,9 +499,11 @@ export class SessionListComponent implements OnInit, OnDestroy { this.hideNotReady4Delay = false; const filters = {} + console.log(filters) // Store the filters, regardless if it is empty this.filterStoreService.storeSessionFilter(filters); + console.log(this.filterStoreService.retrieveSessionFilter) // Add the default sorting for the api request filters['__order'] = 'session_start_time DESC'; @@ -815,6 +916,7 @@ export class SessionListComponent implements OnInit, OnDestroy { updateTableView(restrictedSessions: Array) { this.dataSource.paginator = this.paginator; this.dataSource.sort = this.sort; + console.log(restrictedSessions) this.dataSource.data = restrictedSessions; } @@ -837,13 +939,17 @@ export class SessionListComponent implements OnInit, OnDestroy { else { delete filter.session_range_filter } + console.log(filter); + //this is object of filters being used this.filterStoreService.storeSessionFilter(filter); this.restrictedSessions = await this.applyFilter(); this.createMenu(this.restrictedSessions); - await this.updateTableView(this.restrictedSessions); + //await this.updateTableView(this.restrictedSessions); this.isLoading = false; + this.paginator.pageIndex = 0; + this.ngAfterViewInit(); } /** @@ -889,6 +995,8 @@ export class SessionListComponent implements OnInit, OnDestroy { // Add the default sorting for the api request requestFilter['__order'] = 'session_start_time DESC'; + console.log(requestFilter) + // Query back end tupleToRestrict = await this.allSessionsService.fetchSessions(requestFilter).toPromise(); } @@ -909,6 +1017,7 @@ export class SessionListComponent implements OnInit, OnDestroy { restrictedSessions.push(tuple); } } + console.log(restrictedSessions) return restrictedSessions; } @@ -921,7 +1030,7 @@ export class SessionListComponent implements OnInit, OnDestroy { await this.fetchSessions(); this.restrictedSessions = await this.applyFilter(); this.createMenu(this.restrictedSessions); - await this.updateTableView(this.restrictedSessions); + //await this.updateTableView(this.restrictedSessions); this.isLoading = false; } @@ -974,7 +1083,7 @@ export class SessionListComponent implements OnInit, OnDestroy { }); this.sort.active = ''; - await this.updateTableView(this.restrictedSessions); + //await this.updateTableView(this.restrictedSessions); this.isLoading = false; return; } From 77cad00ac4641a7ee7424a6e66a77b4e1c3e91b2 Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Wed, 27 Oct 2021 17:26:22 -0500 Subject: [PATCH 09/36] Bump version for demo and reset build arg. --- docker-compose-base.yml | 6 +++--- .../frontend-content/src/environments/environment.prod.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker-compose-base.yml b/docker-compose-base.yml index 7e8a7352..6c579b6c 100644 --- a/docker-compose-base.yml +++ b/docker-compose-base.yml @@ -9,7 +9,7 @@ services: iblapi: <<: *net # image: registry.vathes.com/ibl-navigator/iblapi:v0.5.3 # for internal demo - image: registry.vathes.com/ibl-navigator/iblapi:v0.2.1-public # for public demo + image: registry.vathes.com/ibl-navigator/iblapi:v0.3.0-public # for public demo environment: # for internal djcompute # - DJ_USER=maho @@ -33,7 +33,7 @@ services: ibl-navigator: <<: *net # image: registry.vathes.com/ibl-navigator/frontend:v0.4.2 # for internal demo - image: registry.vathes.com/ibl-navigator/frontend:v0.2.6-public # for public demo + image: registry.vathes.com/ibl-navigator/frontend:v0.3.0-public # for public demo healthcheck: test: curl --fail http://localhost:9000 || exit 1 timeout: 3s @@ -42,7 +42,7 @@ services: <<: *net platform: linux/amd64 # image: registry.vathes.com/ibl-navigator/node-server:v0.3.0 # for internal demo - image: registry.vathes.com/ibl-navigator/node-server:v0.2.1-public # for public demo + image: registry.vathes.com/ibl-navigator/node-server:v0.3.0-public # for public demo environment: - NODE_ENV=development - DEMO_USERNAME=ibluser diff --git a/ibl-frontend/frontend-content/src/environments/environment.prod.ts b/ibl-frontend/frontend-content/src/environments/environment.prod.ts index 0f9c6cf1..e0dc2ff6 100644 --- a/ibl-frontend/frontend-content/src/environments/environment.prod.ts +++ b/ibl-frontend/frontend-content/src/environments/environment.prod.ts @@ -1,6 +1,6 @@ export const environment = { production: true, // api_url: '$PROD_NODE_API', - backend_url: 'https://fakeservices.datajoint.io/api' + backend_url: '$PROD_NODE_BACKEND' }; // before deploying, make sure backend_url part is backend_url: '(dollar)PROD_NODE_BACKEND' \ No newline at end of file From c73c043d953bfbca87b0df8221bd27c7c6e832c9 Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Thu, 28 Oct 2021 10:54:58 -0500 Subject: [PATCH 10/36] Update PROD docker image, image tag, and address PROD build issues for Angular. --- docker-compose-base.yml | 2 +- ibl-frontend/Dockerfile | 12 ++++++++---- ibl-frontend/frontend-content/angular.json | 4 +--- .../src/app/session-list/all-sessions.service.ts | 2 +- .../frontend-content/src/environments/environment.ts | 4 ++-- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/docker-compose-base.yml b/docker-compose-base.yml index 6c579b6c..6a9bdae0 100644 --- a/docker-compose-base.yml +++ b/docker-compose-base.yml @@ -33,7 +33,7 @@ services: ibl-navigator: <<: *net # image: registry.vathes.com/ibl-navigator/frontend:v0.4.2 # for internal demo - image: registry.vathes.com/ibl-navigator/frontend:v0.3.0-public # for public demo + image: registry.vathes.com/ibl-navigator/frontend:v0.3.1-public # for public demo healthcheck: test: curl --fail http://localhost:9000 || exit 1 timeout: 3s diff --git a/ibl-frontend/Dockerfile b/ibl-frontend/Dockerfile index 4543ce65..c6f32ad3 100644 --- a/ibl-frontend/Dockerfile +++ b/ibl-frontend/Dockerfile @@ -1,6 +1,10 @@ -FROM vathes/angulardev:angcli7.1.4-angbuild0.11.4 +# FROM vathes/angulardev:angcli7.1.4-angbuild0.11.4 +FROM node:12-bullseye +RUN \ + apt update && \ + apt install nginx -y WORKDIR /app/dist/pipeline-viewer @@ -12,10 +16,10 @@ COPY ./app.conf /etc/nginx/conf.d/default.conf CMD ["nginx", "-g", "daemon off;"] ADD ./frontend-content/package.json /app/ -ADD ./frontend-content/package-lock.json /app/ +# ADD ./frontend-content/package-lock.json /app/ RUN \ cd /app && \ - npm install --save-dev @angular-devkit/build-angular > /dev/null + npm install # --save-dev @angular-devkit/build-angular > /dev/null ADD ./frontend-content /app @@ -25,7 +29,7 @@ COPY ./frontend-content/src/assets/addons/plotly.js /app/node_modules/plotly.js- RUN \ cd /app && \ - node --max_old_space_size=8192 /usr/local/lib/node_modules/@angular/cli/bin/ng build --prod + node --max_old_space_size=8192 /app/node_modules/@angular/cli/bin/ng build --configuration production # CMD ["http-server","-p", "8080" ,"-a","0.0.0.0"] diff --git a/ibl-frontend/frontend-content/angular.json b/ibl-frontend/frontend-content/angular.json index e558feb3..9521a3e7 100644 --- a/ibl-frontend/frontend-content/angular.json +++ b/ibl-frontend/frontend-content/angular.json @@ -31,8 +31,6 @@ "input": "src/assets/fonts/css/open-iconic-bootstrap.min.css", "inject": true }, - "node_modules/@angular/material/prebuilt-themes/indigo-pink-ibl.css", - "src/assets/fonts/css/open-iconic-bootstrap.min.css", "src/styles.css" ], "scripts": [ @@ -64,7 +62,7 @@ { "type": "initial", "maximumWarning": "2mb", - "maximumError": "7mb" + "maximumError": "10mb" }, { "type": "anyComponentStyle", diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index 0b2530fa..e5e0e7fe 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -39,7 +39,7 @@ export class AllSessionsService { } getRepoIssues(body: Object): Observable { - const requestUrl = 'https://fakeservices.datajoint.io/api/sessions'; + const requestUrl = BACKEND_API_URL + '/sessions'; return this.http.post(requestUrl, body, { responseType: 'json' }); diff --git a/ibl-frontend/frontend-content/src/environments/environment.ts b/ibl-frontend/frontend-content/src/environments/environment.ts index 3ca14dfd..a310374b 100644 --- a/ibl-frontend/frontend-content/src/environments/environment.ts +++ b/ibl-frontend/frontend-content/src/environments/environment.ts @@ -5,13 +5,13 @@ export const environment = { production: false, // api_url: '$DEV_NODE_API', - backend_url: 'https://fakeservices.datajoint.io/api' + backend_url: '$DEV_NODE_BACKEND' }; // export const environment = { // production: false, // // api_url: '$DEV_NODE_API', -// backend_url: 'https://fakeservices.datajoint.io/api' +// backend_url: '$DEV_NODE_BACKEND' // }; /* From 3029727cbfa7fdb61ade93ff6849c1c9c66f3432 Mon Sep 17 00:00:00 2001 From: jverswijver Date: Thu, 28 Oct 2021 16:19:03 -0500 Subject: [PATCH 11/36] Fix reset filter button. --- .../session-list/session-list.component.ts | 66 ++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 20f79d83..811fbd06 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -1031,6 +1031,7 @@ export class SessionListComponent implements OnInit, OnDestroy { this.restrictedSessions = await this.applyFilter(); this.createMenu(this.restrictedSessions); //await this.updateTableView(this.restrictedSessions); + this.ngAfterViewInit(); this.isLoading = false; } @@ -1039,38 +1040,40 @@ export class SessionListComponent implements OnInit, OnDestroy { */ async handleResetFilterButtonPress() { this.isLoading = true; - for (const control in this.session_filter_form.controls) { - const toReset = {} + // for (const control in this.session_filter_form.controls) { + // const toReset = {} - if (control === 'session_range_filter') { - toReset[control] = { 'session_range_start': null, 'session_range_end': null} + // if (control === 'session_range_filter') { + // toReset[control] = { 'session_range_start': null, 'session_range_end': null} - } else if (control === 'sex') { - toReset[control] = [false, false, false]; - for (const index in this.session_filter_form.get(control)['controls']) { - this.session_filter_form.get(control).get([index]).enable(); - } - } else { - toReset[control] = null; - } - this.session_filter_form.patchValue(toReset); - } - - this.route.queryParams.subscribe(async param => { - if (Object.keys(param).length > 0) { - // Clear all URL params, and do a fresh fetch - this.router.navigate( - [], - { - relativeTo: this.route, - queryParams: null - }); - } - }) + // } else if (control === 'sex') { + // toReset[control] = [false, false, false]; + // for (const index in this.session_filter_form.get(control)['controls']) { + // this.session_filter_form.get(control).get([index]).enable(); + // } + // } else { + // toReset[control] = null; + // } + // this.session_filter_form.patchValue(toReset); + // } + + // this.route.queryParams.subscribe(async param => { + // if (Object.keys(param).length > 0) { + // // Clear all URL params, and do a fresh fetch + // this.router.navigate( + // [], + // { + // relativeTo: this.route, + // queryParams: null + // }); + // } + // }) + + //all of the above code can just be done with this.session_filter_form.reset() + this.session_filter_form.reset() // clear the filter in storage before applying filter this.filterStoreService.clearSessionFilter(); - this.restrictedSessions = await this.applyFilter(); this.createMenu(this.restrictedSessions); @@ -1078,13 +1081,14 @@ export class SessionListComponent implements OnInit, OnDestroy { this.paginator.pageIndex = 0; this.paginator.pageSize = 25; // the below is to remove the arrow UI that doesn't go away after this.sort.active = '' - this.sort.sortables.forEach(sortItem => { - this.sort.sort(sortItem); - }); - this.sort.active = ''; + // this.sort.sortables.forEach(sortItem => { + // this.sort.sort(sortItem); + // }); + // this.sort.active = ''; //await this.updateTableView(this.restrictedSessions); this.isLoading = false; + this.ngAfterViewInit(); return; } From 929c144fe0542dce70323d060b2b4424bfacc1e9 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Fri, 29 Oct 2021 15:32:05 -0500 Subject: [PATCH 12/36] Adding ['records'] to show graphs --- .../src/app/session-list/all-sessions.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index e5e0e7fe..227496cc 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -97,7 +97,7 @@ export class AllSessionsService { (filteredSessionsData) => { let end = new Date(); // console.log(`It took ${Number(end) - Number(start)}ms to retrieve the session list information`) - this.retrievedSessions = filteredSessionsData; + this.retrievedSessions = filteredSessionsData['records']; // console.log('retrievedSessions data are: '); // console.log(this.retrievedSessions); this.newSessionsLoaded.next(this.retrievedSessions); From 577179d08439f4919fe6f9da6e5e6be6dd7ecf3a Mon Sep 17 00:00:00 2001 From: jverswijver Date: Fri, 29 Oct 2021 16:58:02 -0500 Subject: [PATCH 13/36] Disable filter dropdowns. --- backend/iblapi.py | 2 +- .../session-list/session-list.component.ts | 98 ++++++++++--------- 2 files changed, 51 insertions(+), 49 deletions(-) diff --git a/backend/iblapi.py b/backend/iblapi.py index e447b50d..c7098c1c 100644 --- a/backend/iblapi.py +++ b/backend/iblapi.py @@ -177,7 +177,7 @@ def do_req(subpath): page = int(request.values['__page']) if '__page' in values else 1 proj = json.loads(request.values['__proj']) if '__proj' in values else None special_fields = ['__json', '__limit', '__order', '__proj', '__json_kwargs', '__page'] - for a in (v for v in values if v not in special_fields): + for a in (k for k, v in values.items() if k not in special_fields and v): # HACK: 'uuid' attrs -> UUID type (see also: datajoint-python #594) postargs[a] = UUID(values[a]) if 'uuid' in a else values[a] args = [postargs] if len(postargs) else [] diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 811fbd06..80a8208e 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -298,7 +298,7 @@ export class SessionListComponent implements OnInit, OnDestroy { else { // Else fetch from database console.log('in ngOnIt fetchSessions') - await this.fetchSessions(); + // await this.fetchSessions(); this.initialLoad = false; } @@ -545,56 +545,57 @@ export class SessionListComponent implements OnInit, OnDestroy { keys.forEach(key => { this.uniqueValuesForEachAttribute[key] = new Set(); }) - - // Loop through each tuple - restrictedSessions.forEach(tuple => { - keys.forEach(key => { - if (tuple[key] !== null && !this.uniqueValuesForEachAttribute[key].has(tuple[key])) { - // Add it to the uniqueValuesForColumns if it doesn't already exist in there - this.uniqueValuesForEachAttribute[key].add(tuple[key]) - } - }) - }); + + + // // Loop through each tuple + // restrictedSessions.forEach(tuple => { + // keys.forEach(key => { + // if (tuple[key] !== null && !this.uniqueValuesForEachAttribute[key].has(tuple[key])) { + // // Add it to the uniqueValuesForColumns if it doesn't already exist in there + // this.uniqueValuesForEachAttribute[key].add(tuple[key]) + // } + // }) + // }); - // Deal with specific case for - this.patchSexMaterial(Sex.FEMALE, this.uniqueValuesForEachAttribute['sex'].has('F')); - this.patchSexMaterial(Sex.MALE, this.uniqueValuesForEachAttribute['sex'].has('M')); - this.patchSexMaterial(Sex.UNDEFINED, this.uniqueValuesForEachAttribute['sex'].has('U')); - - // This is for selected or not for sex, don't know why this is here blame Maho - this.uniqueValuesForEachAttribute['sex'] = { - F: false, - M: false, - U: false - } + // // Deal with specific case for + // this.patchSexMaterial(Sex.FEMALE, this.uniqueValuesForEachAttribute['sex'].has('F')); + // this.patchSexMaterial(Sex.MALE, this.uniqueValuesForEachAttribute['sex'].has('M')); + // this.patchSexMaterial(Sex.UNDEFINED, this.uniqueValuesForEachAttribute['sex'].has('U')); + + // // This is for selected or not for sex, don't know why this is here blame Maho + // this.uniqueValuesForEachAttribute['sex'] = { + // F: false, + // M: false, + // U: false + // } - // Deal with figureing out the range of dates - const sessionSeconds = []; - this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => { - sessionSeconds.push(new Date(date).getTime()); - }); + // // Deal with figureing out the range of dates + // const sessionSeconds = []; + // this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => { + // sessionSeconds.push(new Date(date).getTime()); + // }); - this.sessionMinDate = new Date(Math.min(...sessionSeconds)); - this.sessionMaxDate = new Date(Math.max(...sessionSeconds)); - - // Figure out what dates are valid and assign it to this.sessionDateFilter for the material table to highlight those date - this.sessionDateFilter = (date: Date): boolean => { - let sessionDates = []; - this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => { - sessionDates.push(date.toString().substring(0, 10)); // Split it at T and only take the first half - }); - // filter out dates without any session - return (date == null ? true : sessionDates.includes(date.toISOString().split('T')[0])) - }; - - // Figure out what dates for the mouse Birthday Filter are valid and assign it to this.sessionDateFilter for the material table to highlight those date - this.miceBirthdayFilter = (calendarDate: Date): boolean => { - let birthDates = []; - this.uniqueValuesForEachAttribute['subject_birth_date'].forEach(date => { - birthDates.push(date); - }); - return (calendarDate == null ? true : birthDates.includes(calendarDate.toISOString().split('T')[0])) - }; + // this.sessionMinDate = new Date(Math.min(...sessionSeconds)); + // this.sessionMaxDate = new Date(Math.max(...sessionSeconds)); + + // // Figure out what dates are valid and assign it to this.sessionDateFilter for the material table to highlight those date + // this.sessionDateFilter = (date: Date): boolean => { + // let sessionDates = []; + // this.uniqueValuesForEachAttribute['session_start_time'].forEach(date => { + // sessionDates.push(date.toString().substring(0, 10)); // Split it at T and only take the first half + // }); + // // filter out dates without any session + // return (date == null ? true : sessionDates.includes(date.toISOString().split('T')[0])) + // }; + + // // Figure out what dates for the mouse Birthday Filter are valid and assign it to this.sessionDateFilter for the material table to highlight those date + // this.miceBirthdayFilter = (calendarDate: Date): boolean => { + // let birthDates = []; + // this.uniqueValuesForEachAttribute['subject_birth_date'].forEach(date => { + // birthDates.push(date); + // }); + // return (calendarDate == null ? true : birthDates.includes(calendarDate.toISOString().split('T')[0])) + // }; // Set material from drop down this.setDropDownFormOptions('filteredSessionLabOptions', this.session_filter_form.controls.session_lab, 'session_lab'); @@ -957,6 +958,7 @@ export class SessionListComponent implements OnInit, OnDestroy { * @returns */ async applyFilter(focusFieldKey?: string) { + return []; if (!this.allSessions) { return []; } From 76d7ded8ff0a18383864ca2883e9448337b4d0ac Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Fri, 29 Oct 2021 16:58:47 -0500 Subject: [PATCH 14/36] Removed unwanted fields from filter menu --- .../session-list/session-list.component.html | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 09fdae3a..03a86380 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -31,6 +31,15 @@

+ + + + + + +
+ +
@@ -153,28 +162,28 @@

-
Selected Brain Region: + -
- + - -
  • + - + - +
  • @@ -211,7 +220,7 @@

    -
    +
    @@ -240,6 +249,7 @@

    + From 657cb2dc248d407535b434c15c51ccb3b4febcaf Mon Sep 17 00:00:00 2001 From: jverswijver Date: Fri, 29 Oct 2021 17:01:43 -0500 Subject: [PATCH 15/36] Comment out unused code. --- .../session-list/session-list.component.ts | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 80a8208e..9596feea 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -959,68 +959,68 @@ export class SessionListComponent implements OnInit, OnDestroy { */ async applyFilter(focusFieldKey?: string) { return []; - if (!this.allSessions) { - return []; - } + // if (!this.allSessions) { + // return []; + // } - // Hide certain checkboxes - this.hideMissingPlots = false; - this.hideMissingEphys = false; - this.hideNG4BrainMap = false; - this.hideNotReady4Delay = false; + // // Hide certain checkboxes + // this.hideMissingPlots = false; + // this.hideMissingEphys = false; + // this.hideNG4BrainMap = false; + // this.hideNotReady4Delay = false; - let tupleToRestrict = this.allSessions // By default this should be all sessions - - // Check if there is a brain region request, if so override the tupleToRestrict reference - const brainRegionRequest = this.requested_BR; - if (brainRegionRequest.length !== 0) { - // BrainRegionRequest is not empty, thus query the backend for it - let requestFilter = {} - let BR_JSONstring = ''; - if (brainRegionRequest.length > 0) { - BR_JSONstring = ''; - brainRegionRequest.filter(function(selection, index) { - if (index > 0) { - BR_JSONstring += `, "${selection}"` - } else { - BR_JSONstring += `"${selection}"` - } - }) - BR_JSONstring = '[' + BR_JSONstring + ']' - } + // let tupleToRestrict = this.allSessions // By default this should be all sessions + + // // Check if there is a brain region request, if so override the tupleToRestrict reference + // const brainRegionRequest = this.requested_BR; + // if (brainRegionRequest.length !== 0) { + // // BrainRegionRequest is not empty, thus query the backend for it + // let requestFilter = {} + // let BR_JSONstring = ''; + // if (brainRegionRequest.length > 0) { + // BR_JSONstring = ''; + // brainRegionRequest.filter(function(selection, index) { + // if (index > 0) { + // BR_JSONstring += `, "${selection}"` + // } else { + // BR_JSONstring += `"${selection}"` + // } + // }) + // BR_JSONstring = '[' + BR_JSONstring + ']' + // } - // Add it it to the requestFilter object - if (brainRegionRequest.length > 0) { - requestFilter['__json_kwargs'] = '{ "brain_regions": ' + BR_JSONstring + '}'; - } + // // Add it it to the requestFilter object + // if (brainRegionRequest.length > 0) { + // requestFilter['__json_kwargs'] = '{ "brain_regions": ' + BR_JSONstring + '}'; + // } - // Add the default sorting for the api request - requestFilter['__order'] = 'session_start_time DESC'; + // // Add the default sorting for the api request + // requestFilter['__order'] = 'session_start_time DESC'; - console.log(requestFilter) + // console.log(requestFilter) - // Query back end - tupleToRestrict = await this.allSessionsService.fetchSessions(requestFilter).toPromise(); - } + // // Query back end + // tupleToRestrict = await this.allSessionsService.fetchSessions(requestFilter).toPromise(); + // } - // Filter based on what the user requested - let restrictionObjectFromForm = this.session_filter_form.getRawValue(); + // // Filter based on what the user requested + // let restrictionObjectFromForm = this.session_filter_form.getRawValue(); - // if user is focusing on a specific field, then remove the currently focused field's restriction value from menu creation - if (focusFieldKey) { - restrictionObjectFromForm[focusFieldKey] = null; - } + // // if user is focusing on a specific field, then remove the currently focused field's restriction value from menu creation + // if (focusFieldKey) { + // restrictionObjectFromForm[focusFieldKey] = null; + // } - // Iterate through the tuples and restrict accordingly - // This is kind of stupid cause it doesn't check if the restrictionObjectFromForm even have a valid restriction - let restrictedSessions = []; - for (let tuple of tupleToRestrict) { - if (this.doesTupleMatchRestriction(tuple, restrictionObjectFromForm)) { - restrictedSessions.push(tuple); - } - } - console.log(restrictedSessions) - return restrictedSessions; + // // Iterate through the tuples and restrict accordingly + // // This is kind of stupid cause it doesn't check if the restrictionObjectFromForm even have a valid restriction + // let restrictedSessions = []; + // for (let tuple of tupleToRestrict) { + // if (this.doesTupleMatchRestriction(tuple, restrictionObjectFromForm)) { + // restrictedSessions.push(tuple); + // } + // } + // console.log(restrictedSessions) + // return restrictedSessions; } /** From 06008c47339c2eb06f0fe1f07598c54895b9b96d Mon Sep 17 00:00:00 2001 From: guzman-raphael Date: Fri, 29 Oct 2021 18:27:19 -0500 Subject: [PATCH 16/36] Add spinner loading screen between paging. --- .../frontend-content/src/app/app.module.ts | 3 ++- .../app/session-list/session-list.component.css | 14 ++++++++++++++ .../app/session-list/session-list.component.html | 5 ++++- .../src/app/session-list/session-list.component.ts | 4 ++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/app.module.ts b/ibl-frontend/frontend-content/src/app/app.module.ts index ebb86bbd..65b146b0 100644 --- a/ibl-frontend/frontend-content/src/app/app.module.ts +++ b/ibl-frontend/frontend-content/src/app/app.module.ts @@ -64,6 +64,7 @@ import { PsthPlotsComponent } from './cell-list/cell/psth-plots/psth-plots.compo import { QualityControlComponent } from './quality-control/quality-control.component'; import { DriftmapComponent } from './quality-control/driftmap/driftmap.component'; import { SpinningBrainComponent } from './mouse-list/mouse/spinning-brain/spinning-brain.component'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; PlotlyModule.plotlyjs = PlotlyJS; @@ -154,7 +155,7 @@ const appRoutes: Routes = [ FormsModule, HttpClientModule, RouterModule.forRoot(appRoutes), - MatSelectModule, MatAutocompleteModule, MatIconModule, MatInputModule, + MatSelectModule, MatAutocompleteModule, MatIconModule, MatInputModule, MatProgressSpinnerModule, MatCheckboxModule, MatRadioModule, MatNativeDateModule, MatDatepickerModule, MatMomentDateModule, MatSlideToggleModule, MatCardModule, MatButtonModule, MatTableModule, MatPaginatorModule, MatSortModule, MatSliderModule, MatExpansionModule, MatDialogModule, ReactiveFormsModule, FlexLayoutModule, MatTreeModule, MatFormFieldModule diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css index ab1b6a20..ad9dfada 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css @@ -101,6 +101,20 @@ label { display: none; } +.example-loading-shade { + position: absolute; + /* top: 0; */ + left: 0; + /* bottom: 56px; */ + right: 0; + background: rgba(0, 0, 0, 0.15); + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + height: 80%; +} + .session-list-loading-message.show { display: block; } diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 03a86380..758c437d 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -247,8 +247,11 @@

    +
    + +

    Lab {{session.session_lab}}
    - diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 9596feea..7e38d1de 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -55,6 +55,7 @@ export class SessionListComponent implements OnInit, OnDestroy { responsible_user: new FormControl() }); isLoading; + isLoadingTable = true; initialLoad; filterExpanded; allSessions; @@ -343,6 +344,7 @@ export class SessionListComponent implements OnInit, OnDestroy { } ngAfterViewInit() { + this.isLoading = false; this.exampleDatabase = new AllSessionsService(this._httpClient); // If the user changes the sort order, reset back to the first page. @@ -354,6 +356,7 @@ export class SessionListComponent implements OnInit, OnDestroy { .pipe( startWith({}), switchMap(() => { + this.isLoadingTable = true; if(this.sort.direction == ''){ this.sort.active = 'session_start_time'; this.sort.direction = 'desc' @@ -428,6 +431,7 @@ export class SessionListComponent implements OnInit, OnDestroy { .pipe(catchError(() => observableOf(null))); }), map(data => { + this.isLoadingTable = false; // Flip flag to show that loading has finished. this.isLoadingResults = false; this.isRateLimitReached = data === null; From eb928c5441c1a021d0d482f40eaeb205ff7f4add Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 11:30:42 -0500 Subject: [PATCH 17/36] Made changes to iblapi.py --- backend/iblapi.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/backend/iblapi.py b/backend/iblapi.py index c7098c1c..4faedb92 100644 --- a/backend/iblapi.py +++ b/backend/iblapi.py @@ -168,7 +168,6 @@ def do_req(subpath): pathparts = request.path.split('/')[2:] # ['', 'v0'] [ ... ] obj = pathparts[0] values = request.values - print(f"\n\n\n\nValues: {values}\n\n\n\n") postargs, jsonargs = {}, None # construct kwargs kwargs = {'as_dict': True} @@ -197,7 +196,7 @@ def do_req(subpath): ('order_by', order,), ('offset', (page-1)*limit)) if v is not None} # 2) and dispatch - app.logger.info("args: '{}', kwargs: {}".format(args, kwargs)) + app.logger.debug("args: '{}', kwargs: {}".format(args, kwargs)) if obj not in reqmap: abort(404) elif obj == '_q': @@ -216,7 +215,6 @@ def do_req(subpath): return dumps(fetched) # return dumps(q.fetch(**kwargs)) -# def handle_q(subpath, args, proj, fetch_args=None, limit: int = 10, page: int = 1, **kwargs): def handle_q(subpath, args, proj, fetch_args=None, **kwargs): ''' special queries (under '/_q/ URL Space) @@ -226,7 +224,6 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs): app.logger.info("\n\n\nthe value for limit is: {}\n\n\n".format(request.args)) app.logger.info("handle_q: subpath: '{}', args: {}".format(subpath, args)) - app.logger.info('key words: {}'.format(kwargs)) fetch_args = {} if fetch_args is None else fetch_args ret = [] @@ -276,22 +273,11 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs): q = ((acquisition.Session() * sess_proj * psych_curve * ephys_data * subject.Subject() * subject.SubjectLab() * subject.SubjectUser() * trainingStatus) & args & brain_restriction) - - # newLimit = int(request.args.get("limit", 10)) - # page = int(request.args.get("page", 1)) - - app.logger.info('\n\n\n\n\nFetch Args: {}\n\n\n\n'.format(fetch_args)) q = q.proj(*proj) if proj else q - dj.conn().query("SET SESSION max_join_size={}".format('18446744073709551615')) - # q = q.proj(*proj).fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args) if proj else q.fetch(limit=newLimit, offset=(page-1)*limit, **fetch_args) - ret_count = len(q) - ret = q.fetch(**fetch_args) - dj.conn().query("SET SESSION max_join_size={}".format(original_max_join_size)) - return dumps({"records_count": ret_count, "records": ret}) elif subpath == 'subjpage': proj_restr = None From 8833c056d9ba30dfd80e1022dc0ef7cdbda763d7 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 11:31:53 -0500 Subject: [PATCH 18/36] iblapi.py changes --- backend/iblapi.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/backend/iblapi.py b/backend/iblapi.py index 4faedb92..2206646c 100644 --- a/backend/iblapi.py +++ b/backend/iblapi.py @@ -221,10 +221,7 @@ def handle_q(subpath, args, proj, fetch_args=None, **kwargs): - for sessionpage, provide: ((session * subject * lab * user) & arg).proj(flist) ''' - - app.logger.info("\n\n\nthe value for limit is: {}\n\n\n".format(request.args)) app.logger.info("handle_q: subpath: '{}', args: {}".format(subpath, args)) - fetch_args = {} if fetch_args is None else fetch_args ret = [] post_process = None From f96b75e9fad6c7e96a7f1873aa1e80be0e0784e3 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 11:35:23 -0500 Subject: [PATCH 19/36] base docker yml changes --- docker-compose-base.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose-base.yml b/docker-compose-base.yml index 6a9bdae0..46375723 100644 --- a/docker-compose-base.yml +++ b/docker-compose-base.yml @@ -9,7 +9,7 @@ services: iblapi: <<: *net # image: registry.vathes.com/ibl-navigator/iblapi:v0.5.3 # for internal demo - image: registry.vathes.com/ibl-navigator/iblapi:v0.3.0-public # for public demo + image: registry.vathes.com/ibl-navigator/iblapi:v0.3.1-public # for public demo environment: # for internal djcompute # - DJ_USER=maho @@ -33,7 +33,7 @@ services: ibl-navigator: <<: *net # image: registry.vathes.com/ibl-navigator/frontend:v0.4.2 # for internal demo - image: registry.vathes.com/ibl-navigator/frontend:v0.3.1-public # for public demo + image: registry.vathes.com/ibl-navigator/frontend:v0.3.2-public # for public demo healthcheck: test: curl --fail http://localhost:9000 || exit 1 timeout: 3s @@ -42,7 +42,7 @@ services: <<: *net platform: linux/amd64 # image: registry.vathes.com/ibl-navigator/node-server:v0.3.0 # for internal demo - image: registry.vathes.com/ibl-navigator/node-server:v0.3.0-public # for public demo + image: registry.vathes.com/ibl-navigator/node-server:v0.3.1-public # for public demo environment: - NODE_ENV=development - DEMO_USERNAME=ibluser From d559d9679442a17c4322ea387b9de5c331a67ca0 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 11:38:12 -0500 Subject: [PATCH 20/36] changes to frontend/Dockerfile --- ibl-frontend/Dockerfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ibl-frontend/Dockerfile b/ibl-frontend/Dockerfile index c6f32ad3..8bfdc8db 100644 --- a/ibl-frontend/Dockerfile +++ b/ibl-frontend/Dockerfile @@ -16,11 +16,10 @@ COPY ./app.conf /etc/nginx/conf.d/default.conf CMD ["nginx", "-g", "daemon off;"] ADD ./frontend-content/package.json /app/ -# ADD ./frontend-content/package-lock.json /app/ + RUN \ cd /app && \ - npm install # --save-dev @angular-devkit/build-angular > /dev/null - + npm install ADD ./frontend-content /app @@ -29,7 +28,7 @@ COPY ./frontend-content/src/assets/addons/plotly.js /app/node_modules/plotly.js- RUN \ cd /app && \ - node --max_old_space_size=8192 /app/node_modules/@angular/cli/bin/ng build --configuration production + node --max_old_space_size=5120 /app/node_modules/@angular/cli/bin/ng build --configuration production # CMD ["http-server","-p", "8080" ,"-a","0.0.0.0"] From 575151f491061a7913ec40daf8a9bc483866f4b6 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 11:41:00 -0500 Subject: [PATCH 21/36] changes to dev.dockerfile --- ibl-frontend/dev.dockerfile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ibl-frontend/dev.dockerfile b/ibl-frontend/dev.dockerfile index b0d6c80f..80073f2c 100644 --- a/ibl-frontend/dev.dockerfile +++ b/ibl-frontend/dev.dockerfile @@ -12,12 +12,10 @@ HEALTHCHECK \ COPY ./entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] -# CMD tail -f /dev/null WORKDIR /app ADD ./frontend-content/package.json /app/ -#ADD ./frontend-content/package-lock.json /app/ RUN \ npm install && \ npm install --only=dev @@ -27,8 +25,8 @@ COPY ./frontend-content/src/assets/addons/indigo-pink-ibl.css /app/node_modules/ COPY ./frontend-content/src/assets/addons/plotly.js /app/node_modules/plotly.js-dist/ CMD ["node", "--max_old_space_size=5120", "/app/node_modules/@angular/cli/bin/ng", "serve", "--host", "0.0.0.0", "--port", "9000", "--disable-host-check"] -# /app/node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --port 9000 --disable-host-check -# /app/node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --port 9000 --disable-host-check 1> /app/src/output.log 2> /app/src/error.log + +# node --max_old_space_size=5120 /app/node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --port 9000 --disable-host-check 1> /app/src/output.log 2> /app/src/error.log From 99cbe032139b4548bcb7222fea7697baeb36470e Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 11:56:33 -0500 Subject: [PATCH 22/36] interface referencing changes --- .../app/session-list/GithubApiInterface.ts | 6 ----- .../app/session-list/GithubIssueInterface.ts | 20 -------------- .../app/session-list/all-sessions.service.ts | 27 ++++++++++++++++--- .../session-list/session-list.component.ts | 3 +-- 4 files changed, 25 insertions(+), 31 deletions(-) delete mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts delete mode 100644 ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts deleted file mode 100644 index 7cbb7405..00000000 --- a/ibl-frontend/frontend-content/src/app/session-list/GithubApiInterface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { GithubIssue } from "./GithubIssueInterface"; - -export interface GithubApi { - records: GithubIssue[]; - records_count: number; - } \ No newline at end of file diff --git a/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts b/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts deleted file mode 100644 index 83cf47f0..00000000 --- a/ibl-frontend/frontend-content/src/app/session-list/GithubIssueInterface.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface GithubIssue { - mouse_id: number; - session_date: string; - session_lab: string; - subject_nickname: string; - subject_birth_date: string; - session_start_time: string; - task_protocol: string; - subject_line: string; - responsible_user: string; - session_uuid: string; - sex: string; - subject_uuid: string; - nplot: string; - nprobe: string; - session_project: string; - good4bmap: string; - } - - \ No newline at end of file diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index 227496cc..143da4a1 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -1,14 +1,35 @@ import { Injectable } from '@angular/core'; import { Subject, Observable } from 'rxjs'; import { HttpClient } from '@angular/common/http'; -import { GithubApi } from './GithubApiInterface'; -import { GithubIssue } from './GithubIssueInterface'; - import { environment } from '../../environments/environment'; const BACKEND_API_URL = environment.backend_url; +export interface GithubIssue { + mouse_id: number; + session_date: string; + session_lab: string; + subject_nickname: string; + subject_birth_date: string; + session_start_time: string; + task_protocol: string; + subject_line: string; + responsible_user: string; + session_uuid: string; + sex: string; + subject_uuid: string; + nplot: string; + nprobe: string; + session_project: string; + good4bmap: string; +} + +export interface GithubApi { + records: GithubIssue[]; + records_count: number; +} + @Injectable({ providedIn: 'root' }) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 7e38d1de..001a940a 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -8,12 +8,11 @@ import { MatTreeNestedDataSource } from '@angular/material/tree'; import { MatPaginator} from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { MatSort } from '@angular/material/sort'; -import { AllSessionsService } from './all-sessions.service'; +import { AllSessionsService, GithubIssue } from './all-sessions.service'; import { FilterStoreService } from '../filter-store.service'; import * as moment from 'moment'; import * as _ from 'lodash'; import { NestedTreeControl } from '@angular/cdk/tree'; -import { GithubIssue } from './GithubIssueInterface'; enum Sex { From b1d0302764a65c61b4eced82c7993aacce6d4ad1 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 12:00:10 -0500 Subject: [PATCH 23/36] all-sessions-service changes --- .../src/app/session-list/all-sessions.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index 143da4a1..08c5d697 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -25,7 +25,7 @@ export interface GithubIssue { good4bmap: string; } -export interface GithubApi { +interface GithubApi { records: GithubIssue[]; records_count: number; } From 5e57194ab26d5e94a379875bf7c8c6fcfa21c0be Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 13:50:16 -0500 Subject: [PATCH 24/36] Changing name from Sample Project --- .../src/app/session-list/all-sessions.service.ts | 10 +++++----- .../src/app/session-list/session-list.component.ts | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index 08c5d697..1885b52e 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -6,7 +6,7 @@ import { environment } from '../../environments/environment'; const BACKEND_API_URL = environment.backend_url; -export interface GithubIssue { +export interface SessionRecord { mouse_id: number; session_date: string; session_lab: string; @@ -25,8 +25,8 @@ export interface GithubIssue { good4bmap: string; } -interface GithubApi { - records: GithubIssue[]; +interface SessionApi { + records: SessionRecord[]; records_count: number; } @@ -59,11 +59,11 @@ export class AllSessionsService { return this.http.post(BACKEND_API_URL + '/sessions/', sessionFilters, { responseType: 'json'}) } - getRepoIssues(body: Object): Observable { + getSessions(body: Object): Observable { const requestUrl = BACKEND_API_URL + '/sessions'; - return this.http.post(requestUrl, body, { responseType: 'json' }); + return this.http.post(requestUrl, body, { responseType: 'json' }); } getAllSessions() { diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 001a940a..184b3485 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -8,7 +8,7 @@ import { MatTreeNestedDataSource } from '@angular/material/tree'; import { MatPaginator} from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { MatSort } from '@angular/material/sort'; -import { AllSessionsService, GithubIssue } from './all-sessions.service'; +import { AllSessionsService, SessionRecord } from './all-sessions.service'; import { FilterStoreService } from '../filter-store.service'; import * as moment from 'moment'; import * as _ from 'lodash'; @@ -115,7 +115,7 @@ export class SessionListComponent implements OnInit, OnDestroy { selectedSession = {}; exampleDatabase: AllSessionsService | null; - data: GithubIssue[] = []; + data: SessionRecord[] = []; resultsLength = 0; isLoadingResults = true; isRateLimitReached = false; @@ -425,7 +425,7 @@ export class SessionListComponent implements OnInit, OnDestroy { newObject["__page"] = this.paginator.pageIndex + 1; newObject["__limit"] = this.paginator.pageSize; newObject["__order"] = this.sort.active + ' ' + this.sort.direction - return this.exampleDatabase!.getRepoIssues( + return this.exampleDatabase!.getSessions( newObject) .pipe(catchError(() => observableOf(null))); }), @@ -455,7 +455,7 @@ export class SessionListComponent implements OnInit, OnDestroy { // limit errors, we do not want to reset the paginator to zero, as that // would prevent users from re-triggering requests. this.resultsLength = data.records_count; - console.log("data githubIssue" + data.records) + console.log("data SessionRecord" + data.records) console.log("length " + this.resultsLength) return data.records; }) From ad56b254d00a05f16478420addd4b96de69d140d Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:04:34 -0500 Subject: [PATCH 25/36] Commenting format in session-list html --- .../app/session-list/all-sessions.service.ts | 2 -- .../session-list/session-list.component.html | 24 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts index 1885b52e..956391cf 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/all-sessions.service.ts @@ -61,8 +61,6 @@ export class AllSessionsService { getSessions(body: Object): Observable { const requestUrl = BACKEND_API_URL + '/sessions'; - - return this.http.post(requestUrl, body, { responseType: 'json' }); } diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 758c437d..26ddd935 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -162,28 +162,28 @@

    - + - - - - - - - + +
  • + {{node.display}}
  • - // This is the tree node template for expandable nodes +
  • From 05260735ae3eee6103828d8520d4e75de9a5e4cd Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:10:57 -0500 Subject: [PATCH 27/36] HTML formatting session-list --- .../src/app/session-list/session-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index e6529308..6ca60d0f 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -173,7 +173,7 @@

    - +
  • From 4717d22702eae905f0afdd8958780921a3a73e97 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:15:28 -0500 Subject: [PATCH 28/36] HTML formatting session-list --- .../src/app/session-list/session-list.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 6ca60d0f..a4a337d2 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -173,16 +173,16 @@

    - + // This is the tree node template for leaf nodes
  • - + // use a disabled button to provide padding for tree leaf {{node.display}}
  • - + // This is the tree node template for expandable nodes
  • From b56f087894591c4aa5ac4a028ed1bfbecb2ce9b6 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:38:28 -0500 Subject: [PATCH 29/36] HTML changes and removing/change variables --- .../session-list/session-list.component.html | 4 ++-- .../session-list/session-list.component.ts | 24 ++++++++----------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index a4a337d2..2963e13d 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -251,7 +251,7 @@

    *ngIf="isLoadingTable">

    -
  • Lab
    +
    @@ -334,7 +334,7 @@

    Lab
    - diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index 184b3485..c0ebe60e 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -114,11 +114,10 @@ export class SessionListComponent implements OnInit, OnDestroy { selectedSession = {}; - exampleDatabase: AllSessionsService | null; - data: SessionRecord[] = []; - resultsLength = 0; + sessionService: AllSessionsService | null; + sessionRecords: SessionRecord[] = []; + sessionRecordLength = 0; isLoadingResults = true; - isRateLimitReached = false; private sessionsSubscription: Subscription; private sessionMenuSubscription: Subscription; @@ -344,7 +343,7 @@ export class SessionListComponent implements OnInit, OnDestroy { ngAfterViewInit() { this.isLoading = false; - this.exampleDatabase = new AllSessionsService(this._httpClient); + this.sessionService = new AllSessionsService(this._httpClient); // If the user changes the sort order, reset back to the first page. this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0); @@ -425,17 +424,16 @@ export class SessionListComponent implements OnInit, OnDestroy { newObject["__page"] = this.paginator.pageIndex + 1; newObject["__limit"] = this.paginator.pageSize; newObject["__order"] = this.sort.active + ' ' + this.sort.direction - return this.exampleDatabase!.getSessions( + return this.sessionService!.getSessions( newObject) .pipe(catchError(() => observableOf(null))); }), - map(data => { + map(sessionRecords => { this.isLoadingTable = false; // Flip flag to show that loading has finished. this.isLoadingResults = false; - this.isRateLimitReached = data === null; - if (data === null) { + if (sessionRecords === null) { return []; } @@ -454,12 +452,10 @@ export class SessionListComponent implements OnInit, OnDestroy { // Only refresh the result length if there is new data. In case of rate // limit errors, we do not want to reset the paginator to zero, as that // would prevent users from re-triggering requests. - this.resultsLength = data.records_count; - console.log("data SessionRecord" + data.records) - console.log("length " + this.resultsLength) - return data.records; + this.sessionRecordLength = sessionRecords.records_count; + return sessionRecords.records; }) - ).subscribe(data => this.data = data); + ).subscribe(sessionRecords => this.sessionRecords = sessionRecords); } // async pagedTableData(){ From 37660d4c6a807c24154b24dcd998e633f582e36a Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:48:33 -0500 Subject: [PATCH 30/36] clean-up session-list --- .../session-list/session-list.component.ts | 65 ------------------- 1 file changed, 65 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index c0ebe60e..aca29abf 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -178,7 +178,6 @@ export class SessionListComponent implements OnInit, OnDestroy { if (key === '__json') { // If key is __json than to reformat to IBL API format const JSONcontent = JSON.parse(params[key]); - const dateRange = ['', '']; // First value is start date, second value is end date // Loop through each item in JSON Content and figgure out it is a date or a gender @@ -251,11 +250,6 @@ export class SessionListComponent implements OnInit, OnDestroy { } } } - - - - - // Check storage to see if there is anything there // Check for paginator if (this.filterStoreService.sessionPaginator) { @@ -291,12 +285,10 @@ export class SessionListComponent implements OnInit, OnDestroy { // Check for preloaded sessions if (this.filterStoreService.loadedSessions) { // We have previously loaded sessions, thus just use that - console.log(this.filterStoreService.loadedSessions); this.allSessions = this.filterStoreService.loadedSessions; } else { // Else fetch from database - console.log('in ngOnIt fetchSessions') // await this.fetchSessions(); this.initialLoad = false; } @@ -304,13 +296,10 @@ export class SessionListComponent implements OnInit, OnDestroy { // Check if there are params, if they are then apply them via this.applyFilter(); if (params !== undefined && Object.keys(params).length !== 0) { // There are params, thus apply the filter and get the restricted sessions - console.log(params) this.restrictedSessions = await this.applyFilter(); - console.log(this.restrictedSessions) } else { // There are no params so just set restricted Session to all sessions - console.log(this.restrictedSessions) this.restrictedSessions = this.allSessions } @@ -326,8 +315,6 @@ export class SessionListComponent implements OnInit, OnDestroy { this.dataSource.paginator = this.paginator } - - console.log("update selection") this.updateSelection(); }); @@ -344,12 +331,9 @@ export class SessionListComponent implements OnInit, OnDestroy { ngAfterViewInit() { this.isLoading = false; this.sessionService = new AllSessionsService(this._httpClient); - // If the user changes the sort order, reset back to the first page. this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0); - let newObject = {}; - merge(this.sort.sortChange, this.paginator.page) .pipe( startWith({}), @@ -360,13 +344,10 @@ export class SessionListComponent implements OnInit, OnDestroy { this.sort.direction = 'desc' } let filter = Object.assign({}, this.session_filter_form.getRawValue()); - console.log(`filter: ${JSON.stringify(filter)}`); let newFilter = JSON.stringify(filter) - console.log(Object.entries(filter)) for (const [key, value] of Object.entries(filter)) { if(key == 'sex'){ - console.log("\n\ntypeof sex", typeof(value)) if(value[0] == true){ newObject[key] = 'F' //female @@ -385,22 +366,9 @@ export class SessionListComponent implements OnInit, OnDestroy { else{ continue } - - // for( const [key2, val] of Object.entries(value)){ - // console.log("inside sex value") - // console.log(`${key2}: ${val}`) - // if(val == 'true') - // console.log(`\n\nSex Value: ${val}\n\n`) - // console.log(`\n\nkey2`) - // newObject[key2] = val - // continue - // } } if(key == 'session_range_filter'){ - console.log("\n\ntypeof of session_range_filter ", typeof(value)) for( const [key2, val] of Object.entries(value)){ - console.log("inside session_range_filter value") - console.log(`${key2}: ${val}`) if(val !== null){ newObject[key2] = val } @@ -410,15 +378,7 @@ export class SessionListComponent implements OnInit, OnDestroy { if(value !== null){ newObject[key] = value } - - console.log(`${key}: ${value}`); - } - - for (const [key, value] of Object.entries(newObject)){ - console.log('\n\nwithin new list\n\n') - console.log(`${key}: ${value}`) } - console.log(typeof(filter)); this.isLoadingResults = true; newObject["__page"] = this.paginator.pageIndex + 1; @@ -436,19 +396,6 @@ export class SessionListComponent implements OnInit, OnDestroy { if (sessionRecords === null) { return []; } - - // if (this.applyFilter()){ - // const restrictedSessions = this.applyFilter(); - // data.records = restrictedSessions; - // return data.records; - // } - - // this.restrictedSessions = await this.applyFilter(); - // this.createMenu(this.restrictedSessions); - // await this.updateTableView(this.restrictedSessions); - - - // Only refresh the result length if there is new data. In case of rate // limit errors, we do not want to reset the paginator to zero, as that // would prevent users from re-triggering requests. @@ -457,12 +404,6 @@ export class SessionListComponent implements OnInit, OnDestroy { }) ).subscribe(sessionRecords => this.sessionRecords = sessionRecords); } - - // async pagedTableData(){ - // const restrictedSessions = await this.applyFilter(); - // this.data.records = restrictedSessions; - // return data.records; - // } ngOnDestroy() { // Store paginator, sort, buttons, and sessions @@ -498,21 +439,15 @@ export class SessionListComponent implements OnInit, OnDestroy { this.hideNotReady4Delay = false; const filters = {} - console.log(filters) // Store the filters, regardless if it is empty this.filterStoreService.storeSessionFilter(filters); - console.log(this.filterStoreService.retrieveSessionFilter) // Add the default sorting for the api request filters['__order'] = 'session_start_time DESC'; - // filters['__page'] = this.pageIndex - // filters['__limit'] = this.pageSize this.allSessions = await this.allSessionsService.fetchSessions(filters).toPromise(); this.allSessions = this.allSessions['records']; - console.log("\n\n\n\nSESSIONS: " + this.allSessions + " \n\n\n\n") - //record count json and assign it here } setDropDownFormOptions(dropDownMenuOptionKey, formControl: AbstractControl, key: string) { From 0a5af0d66bb981b457859a5fae9a3b170bc4152c Mon Sep 17 00:00:00 2001 From: jverswijver Date: Mon, 1 Nov 2021 14:52:34 -0500 Subject: [PATCH 31/36] Fix css. --- .../src/app/session-list/session-list.component.css | 5 +++-- .../src/app/session-list/session-list.component.html | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css index ad9dfada..209144a2 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css @@ -108,11 +108,11 @@ label { /* bottom: 56px; */ right: 0; background: rgba(0, 0, 0, 0.15); - z-index: 1; + z-index: 9; display: flex; align-items: center; justify-content: center; - height: 80%; + height: 100%; } .session-list-loading-message.show { @@ -136,6 +136,7 @@ label { .table-container { width: 100%; + position: relative; overflow-x: auto; } td.mat-cell, diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 758c437d..48cddb11 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -251,7 +251,7 @@

    *ngIf="isLoadingTable"> - +
    From ef0609f7bbf90830791953011e392621c1ac0c92 Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:53:08 -0500 Subject: [PATCH 32/36] removing excess code session-list --- .../src/app/session-list/session-list.component.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts index aca29abf..bcfc244d 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.ts @@ -851,7 +851,6 @@ export class SessionListComponent implements OnInit, OnDestroy { updateTableView(restrictedSessions: Array) { this.dataSource.paginator = this.paginator; this.dataSource.sort = this.sort; - console.log(restrictedSessions) this.dataSource.data = restrictedSessions; } @@ -874,11 +873,7 @@ export class SessionListComponent implements OnInit, OnDestroy { else { delete filter.session_range_filter } - console.log(filter); - //this is object of filters being used this.filterStoreService.storeSessionFilter(filter); - - this.restrictedSessions = await this.applyFilter(); this.createMenu(this.restrictedSessions); //await this.updateTableView(this.restrictedSessions); From 56842f7c1d39727536aff84f3052697910f18b5c Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 14:58:24 -0500 Subject: [PATCH 33/36] app.js removal of console.logs --- node_server/app.js | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/node_server/app.js b/node_server/app.js index 0eda4dcf..e0f22776 100644 --- a/node_server/app.js +++ b/node_server/app.js @@ -190,35 +190,14 @@ app.get('/sessions', checkAuth, (req, res) => { }) app.post('/sessions', checkAuth, cacheMiddleware(15*60), (req, res) => { - // console.log('posting to filter session page'); - console.log('\n\n\n\nreq.body: \n\n\n\n', req.body) + console.log('req.body: ', req.body) console.log('type: ', typeof req.body) - // console.log('\n\n\n\nlimit value\n\n\n', req.query) - // console.log('\n\n\n\nlimit value\n\n\n', req.query.__limit[0]) - // console.log('\n\n\n\npage value\n\n\n', req.query.__page[0]) - // console.log('\n\n\n\norder value\n\n\n', req.query.__order) - // console.log('\n\n\n\n\n\nparams\n\n\n\n\n\n\n', req.params) - // res.append('__limit', req.query.__limit[0]) - // res.append('__page', req.query.__page[0]) - // res.append('__order', req.body) - // res.set({ - // '__limit': req.query.__limit[0], - // '__page': req.query.__page[0] - // }) request.post(flask_backend + '/v0/_q/sessionpage', { form: req.body }, function (error, httpResponse, body) { if (error) { console.error('error [session list fetch]: ', error); res.status(500).end(); return; } - // console.log(body); - // res.append('__limit', req.query.__limit[0]) - // res.append('__page', req.query.__page[0]) - // res.append('__order', req.body) - // res.set({ - // '__limit': req.query.__limit[0], - // '__page': req.query.__page[0] - // }) res.send(body); }) }) From a3d5d19ab8c8e8438e00e67f27662d0e09f848ba Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 15:07:39 -0500 Subject: [PATCH 34/36] HTML changes to session-list html --- .../src/app/session-list/session-list.component.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 2963e13d..961f8302 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -242,9 +242,7 @@

    -

    - Loading for the sessions may take a while depending on your internet connection. We appreciate your patience as we load the full list of sessions. -

    +

    Date: Mon, 1 Nov 2021 15:32:42 -0500 Subject: [PATCH 35/36] changes to css class name and html link --- .../src/app/session-list/session-list.component.css | 2 +- .../src/app/session-list/session-list.component.html | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css index 209144a2..c73569c4 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.css @@ -101,7 +101,7 @@ label { display: none; } -.example-loading-shade { +.session-list-loading-shade { position: absolute; /* top: 0; */ left: 0; diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 961f8302..7e8d1fba 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -38,7 +38,7 @@

    - +
    - -
    @@ -245,12 +243,11 @@

    -

    Lab
    - From 5f64a3c548fbefc285e096289c56f61f5cf6256c Mon Sep 17 00:00:00 2001 From: Carlos Ortiz Date: Mon, 1 Nov 2021 15:36:18 -0500 Subject: [PATCH 36/36] html changes session-list --- .../src/app/session-list/session-list.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html index 7e8d1fba..abda9626 100644 --- a/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html +++ b/ibl-frontend/frontend-content/src/app/session-list/session-list.component.html @@ -38,7 +38,7 @@

    - + +

    Lab {{session.session_lab}}