/bin/commands/countly.sh

https://gitlab.com/ar2rsawseen/countly-server · Shell · 275 lines · 245 code · 23 blank · 7 comment · 40 complexity · 79ee8f7efc647596b453ed30dbd45f5a MD5 · raw file

  1. #!/bin/bash
  2. #get current dir through symlink
  3. SOURCE="${BASH_SOURCE[0]}"
  4. while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  5. DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  6. SOURCE="$(readlink "$SOURCE")"
  7. [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
  8. done
  9. DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  10. #get current countly version
  11. VERSION="$(grep -oP 'version:\s*"\K[0-9\.]*' $DIR/../../frontend/express/version.info.js)"
  12. export LANGUAGE=C ; export LC_ALL=C ;
  13. #stub commands to be overwritten
  14. countly_start (){
  15. echo "start stub";
  16. }
  17. countly_stop (){
  18. echo "stop stub";
  19. }
  20. countly_restart (){
  21. echo "restart stub";
  22. }
  23. countly_status (){
  24. echo "status stub";
  25. }
  26. countly_root (){
  27. if [[ $EUID -ne 0 ]]; then
  28. echo "This command must be run as root"
  29. exit 1
  30. fi
  31. }
  32. #real commands, can also be overwritten
  33. countly_upgrade (){
  34. countly_root ;
  35. (cd $DIR/../.. ;
  36. echo "Installing dependencies...";
  37. npm install ;
  38. echo "Preparing production files...";
  39. grunt dist-all;
  40. echo "Restarting Countly...";
  41. countly restart;
  42. )
  43. }
  44. countly_version (){
  45. echo $VERSION;
  46. }
  47. countly_dir (){
  48. echo "$( cd "$DIR/../.." && pwd )";
  49. }
  50. countly_test (){
  51. countly_root ;
  52. bash $DIR/scripts/countly.run.tests.sh ;
  53. }
  54. countly_backupfiles (){
  55. if [ $# -eq 0 ]
  56. then
  57. echo "Please provide path" ;
  58. return 0;
  59. fi
  60. (mkdir -p $1 ;
  61. cd $1 ;
  62. echo "Backing up Countly configurations and files...";
  63. mkdir -p files/extend ;
  64. mkdir -p files/frontend/express/public/appimages ;
  65. mkdir -p files/frontend/express/public/userimages ;
  66. mkdir -p files/frontend/express/public/themes ;
  67. mkdir -p files/frontend/express/certificates ;
  68. mkdir -p files/frontend/express/public/javascripts/countly ;
  69. mkdir -p files/api ;
  70. if [ -f $DIR/../../frontend/express/config.js ]; then
  71. cp $DIR/../../frontend/express/config.js files/frontend/express/config.js
  72. fi
  73. if [ -f $DIR/../../frontend/express/public/javascripts/countly/countly.config.js ]; then
  74. cp $DIR/../../frontend/express/public/javascripts/countly/countly.config.js files/frontend/express/public/javascripts/countly/countly.config.js
  75. fi
  76. if [ -f $DIR/../../api/config.js ]; then
  77. cp $DIR/../../api/config.js files/api/config.js
  78. fi
  79. if [ -d $DIR/../../extend ]; then
  80. cp -a $DIR/../../extend/. files/extend/
  81. fi
  82. if [ -d $DIR/../../frontend/express/public/appimages ]; then
  83. cp -a $DIR/../../frontend/express/public/appimages/. files/frontend/express/public/appimages/
  84. fi
  85. if [ -d $DIR/../../frontend/express/public/userimages ]; then
  86. cp -a $DIR/../../frontend/express/public/userimages/. files/frontend/express/public/userimages/
  87. fi
  88. if [ -d $DIR/../../frontend/express/public/themes ]; then
  89. cp -a $DIR/../../frontend/express/public/themes/. files/frontend/express/public/themes/
  90. fi
  91. if [ -d $DIR/../../frontend/express/certificates ]; then
  92. cp -a $DIR/../../frontend/express/certificates/. files/frontend/express/certificates/
  93. fi
  94. for d in $DIR/../../plugins/*; do
  95. PLUGIN=$(basename $d);
  96. if [ -f $d/config.js ]; then
  97. mkdir -p files/plugins/$PLUGIN ;
  98. cp $d/config.js files/plugins/$PLUGIN/config.js ;
  99. fi
  100. if [ -d $d/extend ]; then
  101. mkdir -p files/plugins/$PLUGIN/extend ;
  102. cp -a $d/extend/. files/plugins/$PLUGIN/extend/ ;
  103. fi
  104. done
  105. )
  106. }
  107. countly_backupdb (){
  108. if [ $# -eq 0 ]
  109. then
  110. echo "Please provide path" ;
  111. return 0;
  112. fi
  113. (mkdir -p $1 ;
  114. cd $1 ;
  115. echo "Backing up mongodb...";
  116. mongodump --db countly > /dev/null;
  117. mongodump --db countly_drill > /dev/null;
  118. )
  119. }
  120. countly_backup (){
  121. if [ $# -eq 0 ]
  122. then
  123. echo "Please provide path" ;
  124. return 0;
  125. fi
  126. countly_backupfiles "$@";
  127. countly_backupdb "$@";
  128. }
  129. countly_restorefiles (){
  130. if [ $# -eq 0 ]
  131. then
  132. echo "Please provide path" ;
  133. return 0;
  134. fi
  135. if [ -d $1/files ]; then
  136. echo "Restoring Countly configurations and files...";
  137. (cd $1 ;
  138. mkdir -p $DIR/../../extend ;
  139. mkdir -p $DIR/../../frontend/express/public/appimages ;
  140. mkdir -p $DIR/../../frontend/express/public/userimages ;
  141. mkdir -p $DIR/../../frontend/express/public/themes ;
  142. mkdir -p $DIR/../../frontend/express/certificates ;
  143. mkdir -p $DIR/../../frontend/express/public/javascripts/countly ;
  144. mkdir -p $DIR/../../api ;
  145. if [ -f files/frontend/express/config.js ]; then
  146. cp files/frontend/express/config.js $DIR/../../frontend/express/config.js
  147. fi
  148. if [ -f files/frontend/express/public/javascripts/countly/countly.config.js ]; then
  149. cp files/frontend/express/public/javascripts/countly/countly.config.js $DIR/../../frontend/express/public/javascripts/countly/countly.config.js
  150. fi
  151. if [ -f files/api/config.js ]; then
  152. cp files/api/config.js $DIR/../../api/config.js
  153. fi
  154. if [ -d files/extend ]; then
  155. cp -a files/extend/. $DIR/../../extend/
  156. fi
  157. if [ -d files/frontend/express/public/appimages ]; then
  158. cp -a files/frontend/express/public/appimages/. $DIR/../../frontend/express/public/appimages/
  159. fi
  160. if [ -d files/frontend/express/public/userimages ]; then
  161. cp -a files/frontend/express/public/userimages/. $DIR/../../frontend/express/public/userimages/
  162. fi
  163. if [ -d files/frontend/express/public/themes ]; then
  164. cp -a files/frontend/express/public/themes/. $DIR/../../frontend/express/public/themes/
  165. fi
  166. if [ -d files/frontend/express/certificates ]; then
  167. cp -a files/frontend/express/certificates/. $DIR/../../frontend/express/certificates/
  168. fi
  169. for d in files/plugins/*; do
  170. PLUGIN=$(basename $d);
  171. if [ -f $d/config.js ]; then
  172. mkdir -p $DIR/../../plugins/$PLUGIN ;
  173. cp $d/config.js $DIR/../../plugins/$PLUGIN/config.js ;
  174. fi
  175. if [ -d $d/extend ]; then
  176. mkdir -p $DIR/../../plugins/$PLUGIN/extend ;
  177. cp -a $d/extend/. $DIR/../../plugins/$PLUGIN/extend/ ;
  178. fi
  179. done
  180. )
  181. echo "Restarting Countly...";
  182. countly restart;
  183. else
  184. echo "No files to restore from";
  185. fi
  186. }
  187. countly_restoredb (){
  188. if [ $# -eq 0 ]
  189. then
  190. echo "Please provide path" ;
  191. return 0;
  192. fi
  193. if [ -d $1/dump/countly ]; then
  194. echo "Restoring countly database...";
  195. mongorestore --db countly $1/dump/countly > /dev/null;
  196. else
  197. echo "No countly database dump to restore from";
  198. fi
  199. if [ -d $1/dump/countly_drill ]; then
  200. echo "Restoring countly_drill database...";
  201. mongorestore --db countly_drill $1/dump/countly_drill > /dev/null;
  202. else
  203. echo "No countly_drill database dump to restore from";
  204. fi
  205. }
  206. countly_restore (){
  207. if [ $# -eq 0 ]
  208. then
  209. echo "Please provide path" ;
  210. return 0;
  211. fi
  212. countly_restorefiles "$@";
  213. countly_restoredb "$@";
  214. }
  215. countly_thp (){
  216. cp -f $DIR/../scripts/disable-transparent-hugepages /etc/init.d/disable-transparent-hugepages
  217. chmod 755 /etc/init.d/disable-transparent-hugepages
  218. update-rc.d disable-transparent-hugepages defaults
  219. }
  220. #load real platform/init sys file to overwrite stubs
  221. source $DIR/enabled/countly.sh
  222. #process command
  223. NAME=$1;
  224. if [ -n "$(type -t countly_$1)" ] && [ "$(type -t countly_$1)" = function ]; then
  225. shift;
  226. countly_${NAME} "$@";
  227. elif [ -f $DIR/scripts/$NAME.sh ]; then
  228. shift;
  229. bash $DIR/scripts/$NAME.sh "$@";
  230. else
  231. echo "";
  232. echo "countly usage:";
  233. echo " countly start # starts countly process";
  234. echo " countly stop # stops countly process";
  235. echo " countly restart # restarts countly process";
  236. echo " countly upgrade # standard upgrade process (install dependencies, minify files, restart countly)";
  237. echo " countly version # outputs current countly version";
  238. echo " countly dir # outputs countly install directory";
  239. echo " countly test # run countly tests";
  240. echo " countly usage # prints this out, but so as basically everything else does";
  241. echo " countly backupfiles path/to/backup # backups countly user/config files";
  242. echo " countly backupdb path/to/backup # backups countly database";
  243. echo " countly backup path/to/backup # backups countly db and user/config files";
  244. echo " countly restorefiles path/to/backup # restores user/config files from provided backup";
  245. echo " countly restoredb path/to/backup # restores countly db from provided backup";
  246. echo " countly restore path/to/backup # restores countly db and config files from provided backup";
  247. countly api ;
  248. countly plugin ;
  249. countly update ;
  250. countly config ;
  251. echo "";
  252. fi