├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── bin ├── check_db_up.sh ├── connect_to_db.sh ├── create_api_key.sh ├── create_tables.sh ├── create_webagency.sh ├── fix_gtfs_stop_times.sh ├── generate_sql.sh ├── get_api_key.sh ├── import_avl.sh ├── import_gtfs.sh ├── process_avl.sh ├── set_config.sh ├── start_transitclock.sh └── update_traveltimes.sh ├── config ├── postgres_hibernate.cfg.xml ├── test │ ├── transitclockConfig1.xml │ ├── transitclockConfig2.xml │ ├── transitclockConfig3.xml │ └── transitclockConfig4.xml └── transitclock.properties ├── data ├── avl.csv └── gtfs_hart_old.zip ├── go.sh └── run_to_bash.sh /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM maven:3.6-jdk-8 2 | LABEL org.opencontainers.image.authors="Nathan Walker , Sean Óg Crudden " 3 | 4 | ARG AGENCYID="1" 5 | ARG AGENCYNAME="GOHART" 6 | ARG GTFS_URL="http://gohart.org/google/google_transit.zip" 7 | ARG GTFSRTVEHICLEPOSITIONS="http://realtime.prod.obahart.org:8088/vehicle-positions" 8 | ARG TRANSITCLOCK_PROPERTIES="config/transitclock.properties" 9 | 10 | ENV AGENCYID ${AGENCYID} 11 | ENV AGENCYNAME ${AGENCYNAME} 12 | ENV GTFS_URL ${GTFS_URL} 13 | ENV GTFSRTVEHICLEPOSITIONS ${GTFSRTVEHICLEPOSITIONS} 14 | ENV TRANSITCLOCK_PROPERTIES ${TRANSITCLOCK_PROPERTIES} 15 | 16 | ENV TRANSITCLOCK_CORE /transitclock-core 17 | 18 | RUN apt-get update \ 19 | && apt-get install -y postgresql-client \ 20 | && apt-get install -y git-core \ 21 | && apt-get install -y vim 22 | 23 | ENV CATALINA_HOME /usr/local/tomcat 24 | ENV PATH $CATALINA_HOME/bin:$PATH 25 | RUN mkdir -p "$CATALINA_HOME" 26 | WORKDIR $CATALINA_HOME 27 | 28 | ENV TOMCAT_MAJOR 8 29 | ENV TOMCAT_VERSION 8.0.43 30 | ENV TOMCAT_TGZ_URL https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz 31 | 32 | RUN set -x \ 33 | && curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \ 34 | && tar -xvf tomcat.tar.gz --strip-components=1 \ 35 | && rm bin/*.bat \ 36 | && rm tomcat.tar.gz* 37 | 38 | EXPOSE 8080 39 | 40 | 41 | # Install json parser so we can read API key for CreateAPIKey output 42 | 43 | RUN wget https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64 44 | RUN mv ./jq-linux-amd64 ./jq 45 | 46 | RUN chmod +x ./jq 47 | 48 | RUN cp jq /usr/bin/ 49 | 50 | WORKDIR / 51 | RUN mkdir /usr/local/transitclock 52 | RUN mkdir /usr/local/transitclock/db 53 | RUN mkdir /usr/local/transitclock/config 54 | RUN mkdir /usr/local/transitclock/logs 55 | RUN mkdir /usr/local/transitclock/cache 56 | RUN mkdir /usr/local/transitclock/data 57 | RUN mkdir /usr/local/transitclock/test 58 | RUN mkdir /usr/local/transitclock/test/config 59 | 60 | WORKDIR /usr/local/transitclock 61 | 62 | RUN curl -s https://api.github.com/repos/TheTransitClock/transitime/releases/latest | jq -r ".assets[].browser_download_url" | grep 'Core.jar\|api.war\|web.war' | xargs -L1 wget 63 | 64 | #ADD transitime/transitclockWebapp/target/web.war /usr/local/transitclock/ 65 | #ADD transitime/transitclockApi/target/api.war /usr/local/transitclock/ 66 | #ADD transitime/transitclock/target/Core.jar /usr/local/transitclock/ 67 | 68 | # Deploy API which talks to core using RMI calls. 69 | RUN mv api.war /usr/local/tomcat/webapps 70 | 71 | # Deploy webapp which is a UI based on the API. 72 | RUN mv web.war /usr/local/tomcat/webapps 73 | 74 | # Scripts required to start transiTime. 75 | ADD bin/check_db_up.sh /usr/local/transitclock/bin/check_db_up.sh 76 | ADD bin/generate_sql.sh /usr/local/transitclock/bin/generate_sql.sh 77 | ADD bin/create_tables.sh /usr/local/transitclock/bin/create_tables.sh 78 | ADD bin/create_api_key.sh /usr/local/transitclock/bin/create_api_key.sh 79 | ADD bin/create_webagency.sh /usr/local/transitclock/bin/create_webagency.sh 80 | ADD bin/import_gtfs.sh /usr/local/transitclock/bin/import_gtfs.sh 81 | ADD bin/start_transitclock.sh /usr/local/transitclock/bin/start_transitclock.sh 82 | ADD bin/get_api_key.sh /usr/local/transitclock/bin/get_api_key.sh 83 | ADD bin/import_avl.sh /usr/local/transitclock/bin/import_avl.sh 84 | ADD bin/process_avl.sh /usr/local/transitclock/bin/process_avl.sh 85 | ADD bin/update_traveltimes.sh /usr/local/transitclock/bin/update_traveltimes.sh 86 | ADD bin/set_config.sh /usr/local/transitclock/bin/set_config.sh 87 | 88 | # Handy utility to allow you connect directly to database 89 | ADD bin/connect_to_db.sh /usr/local/transitclock/bin/connect_to_db.sh 90 | 91 | ENV PATH="/usr/local/transitclock/bin:${PATH}" 92 | 93 | # This is a way to copy in test data to run a regression test. 94 | ADD data/avl.csv /usr/local/transitclock/data/avl.csv 95 | ADD data/gtfs_hart_old.zip /usr/local/transitclock/data/gtfs_hart_old.zip 96 | 97 | RUN \ 98 | sed -i 's/\r//' /usr/local/transitclock/bin/*.sh &&\ 99 | chmod 777 /usr/local/transitclock/bin/*.sh 100 | 101 | ADD config/postgres_hibernate.cfg.xml /usr/local/transitclock/config/hibernate.cfg.xml 102 | ADD ${TRANSITCLOCK_PROPERTIES} /usr/local/transitclock/config/transitclock.properties 103 | 104 | # This adds the transitime configs to test. 105 | ADD config/test/* /usr/local/transitclock/config/test/ 106 | 107 | EXPOSE 8080 108 | 109 | CMD ["./bin/start_transitclock.sh"] 110 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Nathan Walker 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # transitime-docker 2 | 3 | Things to make transitime go: 4 | 5 | - Ubuntu 6 | - sudo apt-get install git 7 | - git clone https://github.com/TheTransitClock/transitclockDocker.git 8 | - curl -sSL https://get.docker.com/ | sh (i.e. install docker) 9 | - Configure agency details in the go.sh script. Here you set the agency name, agency id** (as in GTFS feed), GTFS feed location and GTFS-realtime vehicle location url. 10 | - ./go.sh 11 | 12 | **AgencyId is optional in GTFS so just set to 1 if none specified. 13 | 14 | The go script will build the transitime container (takes a long time), start the postgres db, create the tables, 15 | push the gtfs data into the db, create an API key and then start the api service and web user interface service. 16 | 17 | To view web interface 18 | ``` 19 | http://[ipaddress]:8080/web 20 | ``` 21 | To view api 22 | ``` 23 | http://[ipaddress]:8080/api 24 | ``` 25 | 26 | You can get the ip address by running 27 | ``` 28 | docker-machine ip [machine name] 29 | 30 | docker-machine ip default 31 | ``` 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /bin/check_db_up.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | export PGPASSWORD=transitclock 3 | 4 | echo 'THETRANSITCLOCK DOCKER: Check if database is runnng.' 5 | RET=1 6 | SUCCESS=0 7 | until [ "$RET" -eq "$SUCCESS" ]; do 8 | 9 | psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres -c "SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');" 10 | RET="$?" 11 | 12 | if [ "$RET" -ne "$SUCCESS" ] 13 | then 14 | echo 'Database is not running.' 15 | sleep 10 16 | fi 17 | done 18 | echo 'THETRANSITCLOCK DOCKER: Database is now running.' 19 | -------------------------------------------------------------------------------- /bin/connect_to_db.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Connecting to database.' 3 | psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_POST_5432_TCP_PORT" -U postgres -d $AGENCYNAME 4 | -------------------------------------------------------------------------------- /bin/create_api_key.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Create API key.' 3 | # This is to substitute into config file the env values 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | 10 | java -cp /usr/local/transitclock/Core.jar org.transitclock.applications.CreateAPIKey -c "/usr/local/transitclock/config/transitclock.properties" -d "foo" -e "og.crudden@gmail.com" -n "Sean Og Crudden" -p "123456" -u "http://www.transitclock.org" 11 | -------------------------------------------------------------------------------- /bin/create_tables.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Create Tables' 3 | 4 | java -cp /usr/local/transitclock/Core.jar org.transitclock.applications.SchemaGenerator -p org.transitclock.db.structs -o /usr/local/transitclock/db 5 | java -cp /usr/local/transitclock/Core.jar org.transitclock.applications.SchemaGenerator -p org.transitclock.db.webstructs -o /usr/local/transitclock/db 6 | 7 | createdb -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres $AGENCYNAME 8 | psql \ 9 | -h "$POSTGRES_PORT_5432_TCP_ADDR" \ 10 | -p "$POSTGRES_PORT_5432_TCP_PORT" \ 11 | -U postgres \ 12 | -d $AGENCYNAME \ 13 | -f /usr/local/transitclock/db/ddl_postgres_org_transitclock_db_structs.sql 14 | psql \ 15 | -h "$POSTGRES_PORT_5432_TCP_ADDR" \ 16 | -p "$POSTGRES_PORT_5432_TCP_PORT" \ 17 | -U postgres \ 18 | -d $AGENCYNAME \ 19 | -f /usr/local/transitclock/db/ddl_postgres_org_transitclock_db_webstructs.sql 20 | -------------------------------------------------------------------------------- /bin/create_webagency.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Create WebAgency.' 3 | # This is to substitute into config file the env values 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | 10 | java -Dtransitclock.db.dbName=$AGENCYNAME -Dtransitclock.hibernate.configFile=/usr/local/transitclock/config/hibernate.cfg.xml -Dtransitclock.db.dbHost=$POSTGRES_PORT_5432_TCP_ADDR:$POSTGRES_PORT_5432_TCP_PORT -Dtransitclock.db.dbUserName=postgres -Dtransitclock.db.dbPassword=$PGPASSWORD -Dtransitclock.db.dbType=postgresql -cp /usr/local/transitclock/Core.jar org.transitclock.db.webstructs.WebAgency $AGENCYID 127.0.0.1 $AGENCYNAME postgresql $POSTGRES_PORT_5432_TCP_ADDR postgres $PGPASSWORD 11 | -------------------------------------------------------------------------------- /bin/fix_gtfs_stop_times.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this script requires: zip, unzip, sort, awk, grep 4 | # everything should come installed except maybe zip 5 | 6 | # Provide a gtfs zip file which contains trips.txt and stop_times.txt 7 | if [ -z "${1}" ]; then 8 | echo "Please provide a zip file" 9 | exit 1 10 | fi 11 | 12 | echo "Extracting the trips and stop_times files from $1" 13 | unzip $1 trips.txt stop_times.txt 14 | # don't need to remove ^M 15 | #sed -e 's/'`echo "\015"`'//g' stop_times.txt 16 | 17 | echo "Get all the unique trip ids and read into stop_times_trips.txt" 18 | # take the file stop_times.txt and output to the unique file out.txt 19 | sort -u -t, -k1,1 stop_times.txt | cut -d \, -f 1 > stop_times_trips.txt 20 | 21 | # kill the last line which isn't numeric 22 | #head -n -1 stop_times_trips.txt > temp.txt ; mv temp.txt stop_times_trips.txt 23 | 24 | # just the trip id from trips.txt 25 | echo "Get just the trip ids from trips.txt" 26 | cat trips.txt | cut -d \, -f 3 > just_trips.txt 27 | 28 | #strip the first line out 29 | #tail -n +2 just_trips.txt > temp.txt ; mv temp.txt just_trips.txt 30 | 31 | # these will need to be removed 32 | echo "Build a list of stop_times that will need to be removed due to missing parent trip id" 33 | grep -v -F -x -f just_trips.txt stop_times_trips.txt > missing_no_parents.txt 34 | 35 | NUMOFLINES=$(wc -l < "missing_no_parents.txt") 36 | 37 | # this will most likely be empty 38 | grep -v -F -x -f stop_times_trips.txt just_trips.txt > missing_no_kids.txt 39 | 40 | if [ "$NUMOFLINES" -gt 0 ]; then 41 | counter=1 42 | while read DELETEME 43 | do 44 | echo "Removing $DELETEME; number $counter of $NUMOFLINES" 45 | let counter++ 46 | awk '!/'"$DELETEME"'/' stop_times.txt > temp && mv temp stop_times.txt 47 | done < missing_no_parents.txt 48 | 49 | # replace the stop_times file 50 | echo "Rebuild the zip file" 51 | zip -f $1 stop_times.txt 52 | else 53 | echo "Nothing missing!" 54 | fi 55 | 56 | # cleanup 57 | rm just_trips.txt 58 | rm trips.txt 59 | rm stop_times_trips.txt 60 | rm stop_times.txt 61 | -------------------------------------------------------------------------------- /bin/generate_sql.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo 'THETRANSITCLOCK DOCKER: Generate SQL to create tables.' 4 | 5 | java -cp /usr/local/transitclock/Core.jar org.transitclock.applications.SchemaGenerator -p org.transitclock.db.structs -o /usr/local/transitclock/db 6 | java -cp /usr/local/transitclock/Core.jar org.transitclock.applications.SchemaGenerator -p org.transitclock.db.webstructs -o /usr/local/transitclock/db 7 | -------------------------------------------------------------------------------- /bin/get_api_key.sh: -------------------------------------------------------------------------------- 1 | psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres -d $AGENCYNAME -t -c "SELECT applicationkey from apikeys;"|xargs -------------------------------------------------------------------------------- /bin/import_avl.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Import test AVL.' 3 | 4 | psql \ 5 | -h "$POSTGRES_PORT_5432_TCP_ADDR" \ 6 | -p "$POSTGRES_PORT_5432_TCP_PORT" \ 7 | -U postgres \ 8 | -d $AGENCYNAME \ 9 | -c "\COPY avlreports FROM '/usr/local/transitclock/data/avl.csv';" 10 | -------------------------------------------------------------------------------- /bin/import_gtfs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Import GTFS file.' 3 | # This is to substitute into config file the env values. 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | 10 | 11 | java -Xmx4g -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.configFiles=/usr/local/transitclock/config/transitclock.properties -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -Dlogback.configurationFile=$TRANSITCLOCK_CORE/transitclock/src/main/resouces/logbackGtfs.xml -cp /usr/local/transitclock/Core.jar org.transitclock.applications.GtfsFileProcessor -gtfsUrl $GTFS_URL -maxTravelTimeSegmentLength 100 12 | 13 | psql \ 14 | -h "$POSTGRES_PORT_5432_TCP_ADDR" \ 15 | -p "$POSTGRES_PORT_5432_TCP_PORT" \ 16 | -U postgres \ 17 | -d $AGENCYNAME \ 18 | -c "update activerevisions set configrev=0 where configrev = -1; update activerevisions set traveltimesrev=0 where traveltimesrev = -1;" 19 | -------------------------------------------------------------------------------- /bin/process_avl.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Process test AVL.' 3 | # This is to substitute into config file the env values. 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | 10 | 11 | psql \ 12 | -h "$POSTGRES_PORT_5432_TCP_ADDR" \ 13 | -p "$POSTGRES_PORT_5432_TCP_PORT" \ 14 | -U postgres \ 15 | -d $AGENCYNAME \ 16 | -c "SELECT distinct time::date as thedate FROM public.avlreports order by thedate;" 17 | 18 | # psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres -d $AGENCYNAME -t -c "SELECT distinct time::date as mydate FROM public.avlreports order by mydate;"|xargs -I {} echo {} 19 | 20 | 21 | # This will process AVL using the set of transitime config files in the test directory. 22 | #find /usr/local/transitclock/config/test/ -type f | sort -n | xargs -I {} java -Xmx2048m -Xss12m -Duser.timezone=EST -Dtransitclock.configFiles={} -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -jar $TRANSITCLOCK_CORE/transitclock/target/Core.jar -configRev 0 \; 23 | java -Xmx2048m -Xss12m -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig1.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/logs/ -jar /usr/local/transitclock/Core.jar -configRev 0 24 | java -Xmx2048m -Xss12m -Dnet.sf.ehcache.disabled=false -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig1.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -cp usr/local/transitclock/Core.jar org.transitclock.applications.UpdateTravelTimes 07-10-2017 07-10-2017 25 | 26 | java -Xmx2048m -Xss12m -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig2.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -jar /usr/local/transitclock/Core.jar -configRev 0 27 | java -Xmx2048m -Xss12m -Dnet.sf.ehcache.disabled=false -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig2.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -cp usr/local/transitclock/Core.jar org.transitclock.applications.UpdateTravelTimes 07-10-2017 07-11-2017 28 | 29 | java -Xmx2048m -Xss12m -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig3.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -jar /usr/local/transitclock/Core.jar -configRev 0 30 | java -Xmx2048m -Xss12m -Dnet.sf.ehcache.disabled=false -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig3.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -cp usr/local/transitclock/Core.jar org.transitclock.applications.UpdateTravelTimes 07-10-2017 07-12-2017 31 | 32 | java -Xmx2048m -Xss12m -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig4.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -jar /usr/local/transitclock/Core.jar -configRev 0 33 | java -Xmx2048m -Xss12m -Dnet.sf.ehcache.disabled=false -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/test/transitclockConfig4.xml -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -cp usr/local/transitclock/Core.jar org.transitclock.applications.UpdateTravelTimes 07-10-2017 07-13-2017 34 | -------------------------------------------------------------------------------- /bin/set_config.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Set Config.' 3 | 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | -------------------------------------------------------------------------------- /bin/start_transitclock.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Start TheTransitClock.' 3 | # This is to substitute into config file the env values 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | 10 | rmiregistry & 11 | 12 | #set the API as an environment variable so we can set in JSP of template/includes.jsp in the transitime webapp 13 | export APIKEY=$(get_api_key.sh) 14 | 15 | # make it so we can also access as a system property in the JSP 16 | export JAVA_OPTS="$JAVA_OPTS -Dtransitclock.apikey=$(get_api_key.sh)" 17 | 18 | export JAVA_OPTS="$JAVA_OPTS -Dtransitclock.configFiles=/usr/local/transitclock/config/transitclock.properties" 19 | 20 | echo JAVA_OPTS $JAVA_OPTS 21 | 22 | /usr/local/tomcat/bin/startup.sh 23 | 24 | java -Xss12m -Xms16g -Xmx32g -Duser.timezone=EST -Dtransitclock.configFiles=/usr/local/transitclock/config/transitclock.properties -Dtransitclock.core.agencyId=$AGENCYID -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -jar /usr/local/transitclock/Core.jar > /usr/local/transitclock/logs/output.txt & 25 | 26 | tail -f /dev/null 27 | -------------------------------------------------------------------------------- /bin/update_traveltimes.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo 'THETRANSITCLOCK DOCKER: Update travel times : '+$1+'==>'+$2+'.' 3 | # This is to substitute into config file the env values. 4 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_ADDR"#"$POSTGRES_PORT_5432_TCP_ADDR"#g {} \; 5 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"POSTGRES_PORT_5432_TCP_PORT"#"$POSTGRES_PORT_5432_TCP_PORT"#g {} \; 6 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"PGPASSWORD"#"$PGPASSWORD"#g {} \; 7 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"AGENCYNAME"#"$AGENCYNAME"#g {} \; 8 | find /usr/local/transitclock/config/ -type f -exec sed -i s#"GTFSRTVEHICLEPOSITIONS"#"$GTFSRTVEHICLEPOSITIONS"#g {} \; 9 | 10 | java -Xmx2048m -Xss12m -Dtransitclock.configFiles=/usr/local/transitclock/config/transitclock.properties -Dtransitclock.core.agencyId=1 -Dtransitclock.logging.dir=/usr/local/transitclock/logs/ -cp /usr/local/transitclock/Core.jar org.transitclock.applications.UpdateTravelTimes $1 $2 11 | -------------------------------------------------------------------------------- /config/postgres_hibernate.cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | org.hibernate.dialect.PostgreSQLDialect 10 | 11 | 12 | org.postgresql.Driver 13 | 14 | 15 | 23 | 24 | true 25 | true 26 | 27 | 34 | 37 | 2 38 | 39 | 20 40 | 43 | 300 44 | 47 | 50 48 | 49 | 58 | 25 59 | 60 | 65 | 76 | 77 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /config/test/transitclockConfig1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | org.transitime.avl.PlaybackModule;org.transitime.core.predAccuracy.PlaybackPredictionAccuracyModule 5 | 6 | 7 | 2 8 | 9 | 10 | true 11 | true 12 | 1200 13 | 1200 14 | 15 | 16 | org.transitime.core.PredictionGeneratorDefaultImpl 17 | 18 | 100 19 | true 20 | true 21 | 24 | false 25 | 4800 26 | 100 27 | 100 28 | 25 29 | 15 30 | 0 31 | 0 32 | 33 | 10800 34 | 35 | true 36 | 120 37 | 39 | 40 | 41 | 42 | 30 43 | 44 | 45 | http://realtime.prod.obahart.org:8088/vehicle-positions 46 | http://realtime.prod.obahart.org:8088/vehicle-positions 47 | 10 48 | 07-10-2017 10:00:00 49 | 07-10-2017 14:00:00 50 | 51 | false 52 | 53 | 54 | 0 55 | 56 | 57 | AGENCYNAME 58 | POSTGRES_PORT_5432_TCP_ADDR:POSTGRES_PORT_5432_TCP_PORT 59 | postgresql 60 | postgres 61 | PGPASSWORD 62 | 63 | 64 | 65 | /usr/local/transitclock/config/hibernate.cfg.xml 66 | 67 | 68 | 69 | http://tile.openstreetmap.org/{z}/{x}/{y}.png 70 | 71 | 72 | -------------------------------------------------------------------------------- /config/test/transitclockConfig2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | org.transitime.avl.PlaybackModule;org.transitime.core.predAccuracy.PlaybackPredictionAccuracyModule 5 | 6 | 7 | 2 8 | 9 | 10 | true 11 | true 12 | 1200 13 | 1200 14 | 15 | 16 | org.transitime.core.PredictionGeneratorDefaultImpl 17 | 18 | 19 | 100 20 | true 21 | true 22 | 25 | false 26 | 4800 27 | 100 28 | 100 29 | 25 30 | 15 31 | 0 32 | 0 33 | 34 | 10800 35 | 36 | true 37 | 120 38 | 40 | 41 | 42 | 43 | 30 44 | 45 | 46 | http://realtime.prod.obahart.org:8088/vehicle-positions 47 | http://realtime.prod.obahart.org:8088/vehicle-positions 48 | 10 49 | 07-11-2017 10:00:00 50 | 07-11-2017 14:00:00 51 | 52 | false 53 | 54 | 55 | 0 56 | 57 | 58 | AGENCYNAME 59 | POSTGRES_PORT_5432_TCP_ADDR:POSTGRES_PORT_5432_TCP_PORT 60 | postgresql 61 | postgres 62 | PGPASSWORD 63 | 64 | 65 | 66 | /usr/local/transitclock/config/hibernate.cfg.xml 67 | 68 | 69 | 70 | http://tile.openstreetmap.org/{z}/{x}/{y}.png 71 | 72 | 73 | -------------------------------------------------------------------------------- /config/test/transitclockConfig3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | org.transitime.avl.PlaybackModule;org.transitime.core.predAccuracy.PlaybackPredictionAccuracyModule 5 | 6 | 7 | 2 8 | 9 | 10 | true 11 | true 12 | 1200 13 | 1200 14 | 15 | 16 | org.transitime.core.PredictionGeneratorDefaultImpl 17 | 18 | 19 | 100 20 | true 21 | true 22 | 25 | false 26 | 4800 27 | 100 28 | 100 29 | 25 30 | 15 31 | 0 32 | 0 33 | 34 | 10800 35 | 36 | true 37 | 120 38 | 40 | 41 | 42 | 43 | 30 44 | 45 | 46 | http://realtime.prod.obahart.org:8088/vehicle-positions 47 | http://realtime.prod.obahart.org:8088/vehicle-positions 48 | 10 49 | 07-12-2017 10:00:00 50 | 07-12-2017 14:00:00 51 | 52 | false 53 | 54 | 55 | 0 56 | 57 | 58 | AGENCYNAME 59 | POSTGRES_PORT_5432_TCP_ADDR:POSTGRES_PORT_5432_TCP_PORT 60 | postgresql 61 | postgres 62 | PGPASSWORD 63 | 64 | 65 | 66 | /usr/local/transiclock/config/hibernate.cfg.xml 67 | 68 | 69 | 70 | http://tile.openstreetmap.org/{z}/{x}/{y}.png 71 | 72 | 73 | -------------------------------------------------------------------------------- /config/test/transitclockConfig4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | org.transitime.avl.PlaybackModule;org.transitime.core.predAccuracy.PlaybackPredictionAccuracyModule 5 | 6 | 7 | 2 8 | 9 | 10 | true 11 | true 12 | 1200 13 | 1200 14 | 15 | 16 | org.transitime.core.PredictionGeneratorDefaultImpl 17 | 18 | 19 | 100 20 | true 21 | true 22 | 25 | false 26 | 4800 27 | 100 28 | 100 29 | 25 30 | 15 31 | 0 32 | 0 33 | 34 | 10800 35 | 36 | true 37 | 120 38 | 40 | 41 | 42 | 43 | 30 44 | 45 | 46 | http://realtime.prod.obahart.org:8088/vehicle-positions 47 | http://realtime.prod.obahart.org:8088/vehicle-positions 48 | 10 49 | 07-13-2017 10:00:00 50 | 07-13-2017 14:00:00 51 | 52 | false 53 | 54 | 55 | 0 56 | 57 | 58 | AGENCYNAME 59 | POSTGRES_PORT_5432_TCP_ADDR:POSTGRES_PORT_5432_TCP_PORT 60 | postgresql 61 | postgres 62 | PGPASSWORD 63 | 64 | 65 | 66 | /usr/local/transitclock/config/hibernate.cfg.xml 67 | 68 | 69 | 70 | http://tile.openstreetmap.org/{z}/{x}/{y}.png 71 | 72 | 73 | -------------------------------------------------------------------------------- /config/transitclock.properties: -------------------------------------------------------------------------------- 1 | transitclock.autoBlockAssigner.autoAssignerEnabled=false 2 | transitclock.autoBlockAssigner.ignoreAvlAssignments=false 3 | transitclock.autoBlockAssigner.allowableEarlySeconds=600 4 | transitclock.autoBlockAssigner.allowableLateSeconds=600 5 | 6 | transitclock.avl.feedTimeoutInMSecs=30000 7 | transitclock.avl.gtfsRealtimeFeedURI=GTFSRTVEHICLEPOSITIONS 8 | transitclock.avl.maxSpeed=50 9 | transitclock.avl.numThreads=1 10 | transitclock.avl.queueSize=2400 11 | 12 | transitclock.blockLoading.agressive=false 13 | 14 | transitclock.cache.core.daysPopulateHistoricalCache=0 15 | 16 | transitclock.core.agencyId=1 17 | transitclock.core.allowableEarlyDepartureTimeForLoggingEvent=180 18 | transitclock.core.allowableEarlyForLayoverSeconds=1800 19 | transitclock.core.allowableEarlySecondsForInitialMatching=1200 20 | transitclock.core.allowableEarlyTimeForEarlyDepartureSecs=180 21 | transitclock.core.allowableLateAtTerminalForLoggingEvent=240 22 | transitclock.core.allowableLateDepartureTimeForLoggingEvent=360 23 | transitclock.core.allowableLateSeconds=2700 24 | transitclock.core.allowableNumberOfBadMatches=4 25 | transitclock.core.afterStopDistance=50 26 | transitclock.core.beforeStopDistance=66 27 | transitclock.core.cache.tripDataHistoryCache=org.transitclock.core.dataCache.ehcache.scheduled.TripDataHistoryCache 28 | transitclock.core.cache.errorCacheClass=org.transitclock.core.dataCache.ehcache.KalmanErrorCache 29 | transitclock.core.cache.stopArrivalDepartureCache=org.transitclock.core.dataCache.ehcache.StopArrivalDepartureCache 30 | #transitclock.core.cache.stopPathPredictionCache=org.transitclock.core.dataCache.StopPathPredictionCache 31 | transitclock.core.cache.stopPathPredictionCache=org.transitclock.core.dataCache.ehcache.dummy.DummyStopPathPredictionCache 32 | #transitclock.core.cache.dwellTimeModelCache=org.transitclock.core.dataCache.ehcache.scheduled.DwellTimeModelCache 33 | transitclock.core.cache.dwellTimeModelCache=org.transitclock.core.dataCache.ehcache.dummy.DummyDwellTimeModelCache 34 | transitclock.core.distanceFromLayoverForEarlyDeparture=250 35 | transitclock.core.dwelltime.model=org.transitclock.core.predictiongenerator.scheduled.dwell.DwellAverage 36 | transitclock.core.dwelltime.headwayGeneratorClass=org.transitclock.core.headwaygenerator.LastArrivalsHeadwayGenerator 37 | transitclock.core.exclusiveBlockAssignments=true 38 | transitclock.core.fillHistoricalCaches=0 39 | transitclock.core.layoverDistance=1000 40 | transitclock.core.longDistanceDeadheadingSpeed=20 41 | transitclock.core.matchHistoryMaxSize=40 42 | transitclock.core.maxHeadingOffsetFromSegment=200 43 | transitclock.core.maxPredictionTimeForDbSecs=1200 44 | transitclock.core.maxPredictionsTimeSecs=1800 45 | transitclock.core.minDistanceForDelayed=100 46 | transitclock.core.minDistanceForNoProgress=100 47 | transitclock.core.onlyNeedArrivalDepartures=false 48 | transitclock.core.predictionGeneratorClass=org.transitclock.core.predictiongenerator.scheduled.traveltime.kalman.KalmanPredictionGeneratorImpl 49 | transitclock.core.shortDistanceDeadheadingSpeed=10 50 | transitclock.core.timeForDeterminingDelayedSecs=300 51 | transitclock.core.timeForDeterminingNoProgress=360000 52 | transitclock.core.trackHistoricalCaches=false 53 | transitclock.core.useArrivalPredictionsForNormalStops=false 54 | 55 | transitclock.db.batchSize=4000 56 | transitclock.db.dbName=AGENCYNAME 57 | transitclock.db.dbPassword=PGPASSWORD 58 | transitclock.db.dbUserName=postgres 59 | transitclock.db.dbHost=POSTGRES_PORT_5432_TCP_ADDR:POSTGRES_PORT_5432_TCP_PORT 60 | transitclock.db.storeDataInDatabase=true 61 | transitclock.db.dbType=postgresql 62 | 63 | 64 | transitclock.predAccuracy.stopsPerTrip=1000 65 | transitclock.predAccuracy.maxPredTimeMinutes=30 66 | 67 | transitclock.prediction.data.kalman.mindays=3 68 | transitclock.prediction.data.kalman.maxdays=5 69 | transitclock.prediction.data.kalman.maxdaystosearch=21 70 | transitclock.prediction.data.kalman.percentagePredictionMethodDifferencene=50 71 | transitclock.prediction.data.kalman.tresholdForDifferenceEventLog=60000 72 | transitclock.prediction.rls.lambda=0.9 73 | 74 | transitclock.timeout.pollingRateSecs=60 75 | 76 | transitclock.hibernate.configFile=/usr/local/transitclock/config/hibernate.cfg.xml 77 | transitclock.logging.dir=/usr/local/transitclock/logs 78 | transitclock.modules.optionalModulesList=org.transitclock.avl.GtfsRealtimeModule;org.transitclock.core.predAccuracy.PredictionAccuracyModule 79 | transitclock.web.mapTileUrl=http://tile.openstreetmap.org/{z}/{x}/{y}.png 80 | 81 | -------------------------------------------------------------------------------- /data/gtfs_hart_old.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheTransitClock/transitclockDocker/c93039aed1ed06667827f2800c698ecc49360717/data/gtfs_hart_old.zip -------------------------------------------------------------------------------- /go.sh: -------------------------------------------------------------------------------- 1 | export PGPASSWORD=transitclock 2 | 3 | docker stop transitclock-db 4 | docker stop transitclock-server-instance 5 | 6 | docker rm transitclock-db 7 | docker rm transitclock-server-instance 8 | 9 | docker rmi transitclock-server 10 | 11 | docker build --no-cache -t transitclock-server \ 12 | --build-arg TRANSITCLOCK_PROPERTIES="config/transitclock.properties" \ 13 | --build-arg AGENCYID="1" \ 14 | --build-arg AGENCYNAME="CAPMETRO" \ 15 | --build-arg GTFS_URL="https://data.texas.gov/download/r4v4-vz24/application/zip" \ 16 | --build-arg GTFSRTVEHICLEPOSITIONS="https://data.texas.gov/download/eiei-9rpf/application%2Foctet-stream" . 17 | 18 | docker run --name transitclock-db -p 5432:5432 -e POSTGRES_PASSWORD=$PGPASSWORD -d postgres:9.6.3 19 | 20 | docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD -v ~/logs:/usr/local/transitclock/logs/ transitclock-server check_db_up.sh 21 | 22 | docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD -v ~/logs:/usr/local/transitclock/logs/ transitclock-server create_tables.sh 23 | 24 | docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD -v ~/logs:/usr/local/transitclock/logs/ transitclock-server import_gtfs.sh 25 | 26 | docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD -v ~/logs:/usr/local/transitclock/logs/ transitclock-server create_api_key.sh 27 | 28 | docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD -v ~/logs:/usr/local/transitclock/logs/ transitclock-server create_webagency.sh 29 | 30 | #docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD transitclock-server ./import_avl.sh 31 | 32 | #docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD transitclock-server ./process_avl.sh 33 | 34 | docker run --name transitclock-server-instance --rm --link transitclock-db:postgres -e PGPASSWORD=$PGPASSWORD -v ~/logs:/usr/local/transitclock/logs/ -v ~/ehcache:/usr/local/transitclock/cache/ -p 8080:8080 transitclock-server start_transitclock.sh 35 | -------------------------------------------------------------------------------- /run_to_bash.sh: -------------------------------------------------------------------------------- 1 | docker run --rm -it --link transitclock-db:postgres transitclock-server-instance /bin/bash 2 | 3 | --------------------------------------------------------------------------------