From 7fb5c5460842d80c9d30de62b65170b38ee05b7c Mon Sep 17 00:00:00 2001 From: Netkas Date: Thu, 14 Jan 2021 13:21:07 -0500 Subject: [PATCH] Added warmup service and ping service --- Docker/bootstrap | 28 +++ Docker/update_server | 2 +- Makefile | 18 ++ README.md | 1 + scripts/red.jpg | Bin 0 -> 85720 bytes scripts/warmup.py | 163 ++++++++++++++++++ .../ping_service/coffeehouse_ping/__init__.py | 4 + .../ping_service/coffeehouse_ping/__main__.py | 50 ++++++ .../ping_service/coffeehouse_ping/server.py | 44 +++++ services/ping_service/setup.py | 16 ++ test.py | 2 + 11 files changed, 327 insertions(+), 1 deletion(-) create mode 100644 scripts/red.jpg create mode 100644 scripts/warmup.py create mode 100644 services/ping_service/coffeehouse_ping/__init__.py create mode 100644 services/ping_service/coffeehouse_ping/__main__.py create mode 100644 services/ping_service/coffeehouse_ping/server.py create mode 100644 services/ping_service/setup.py create mode 100644 test.py diff --git a/Docker/bootstrap b/Docker/bootstrap index 0d84865b..be2efb4a 100644 --- a/Docker/bootstrap +++ b/Docker/bootstrap @@ -15,6 +15,19 @@ else make start_spamdetect & echo "### Starting CoffeeHouse-CoreNLP ###" make start_corenlp & + echo "### Starting CoffeeHouse-NSFW ###" + make start_nsfw & + + echo "### Checking Service Status ###" + + if ! python3 scripts/warmup.py; then + echo "ERROR: Some services failed to start successfully duing the warmup process" + exit 1 + fi + + + echo "### Starting Ping Service ###" + make start_ping & while sleep 60; do @@ -35,11 +48,26 @@ else exit 1 fi + ps aux | grep coffeehouse_nsfw | grep -q -v grep + NSFW_STATUS=$? + if [ $NSFW_STATUS -ne 0 ]; then + echo "ERROR: coffeehouse_nsfw has been terminated, terminating container." + exit 1 + fi + + ps aux | grep coffeehouse_ping | grep -q -v grep + PING_STATUS=$? + if [ $PING_STATUS -ne 0 ]; then + echo "ERROR: coffeehouse_ping has been terminated, terminating container." + exit 1 + fi + ps aux | grep edu.stanford.nlp.pipeline.StanfordCoreNLPServer | grep -q -v grep CORENLP_STATUS=$? if [ $CORENLP_STATUS -ne 0 ]; then echo "ERROR: coffeehouse_corenlp has been terminated, terminating container." exit 1 fi + done fi \ No newline at end of file diff --git a/Docker/update_server b/Docker/update_server index 6c809741..4dbb8f2a 100644 --- a/Docker/update_server +++ b/Docker/update_server @@ -25,4 +25,4 @@ echo " #### Preparing System for Java" make system_prep_java echo " #### Building and Installing CoffeeHousePy" -make install \ No newline at end of file +make install_full \ No newline at end of file diff --git a/Makefile b/Makefile index 171bd8a4..9c251b17 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,9 @@ clean_langdetect: clean_spamdetect: rm -rf services/spam_detection/build services/spam_detection/dist services/spam_detection/coffeehouse_spamdetection.egg-info +clean_ping: + rm -rf services/ping_service/build services/ping_service/dist services/ping_service/coffeehouse_ping.egg-info + clean_translation: rm -rf services/translation/build services/translation/dist services/translation/coffeehouse_translation.egg-info @@ -48,6 +51,7 @@ clean: make clean_spamdetect make clean_nsfw make clean_corenlp + make clean_ping # ====================================================================================================================== @@ -94,6 +98,9 @@ build_corenlp: build_nsfw: cd services/nsfw_detection; python3 setup.py build; python3 setup.py sdist +build_ping: + cd services/ping_service; python3 setup.py build; python3 setup.py sdist + build: make build_nlpfr make build_his @@ -105,6 +112,7 @@ build: make build_spamdetect make build_nsfw make build_corenlp + make build_ping # ====================================================================================================================== @@ -149,6 +157,9 @@ install_translation: install_nsfw: cd services/nsfw_detection; python3 setup.py install +install_ping: + cd services/ping_service; python3 setup.py install + install_full: make install_rf make install @@ -163,6 +174,7 @@ install: make install_spamdetect make install_nsfw make build_corenlp + make build_ping # ====================================================================================================================== @@ -199,6 +211,12 @@ start_nsfw: start_corenlp: cd services/corenlp; make start +start_ping: + python3 -m coffeehouse_ping --start-server + +start_warmup: + cd scripts; python3 warmup.py + # ====================================================================================================================== docker_build: diff --git a/README.md b/README.md index 0539bb88..38a19fa2 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ make start_translate # Starts the translation server, runs on port 5603 | Name | Protocol | Port | |--------------------------------|----------|------| +| CoffeeHouse Ping Service | HTTP | 5600 | | CoffeeHouse Spam Detection | HTTP | 5601 | | CoffeeHouse NSFW Classifier | HTTP | 5602 | | CoffeeHouse Translate | HTTP | 5603 | diff --git a/scripts/red.jpg b/scripts/red.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0adb5482585d5a4e68e18ee6f5f80bfb80fbcf0f GIT binary patch literal 85720 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%0ArS zz4Q;DM22hwEN^bR4ZqEW`tUbC>P=BRiwk1^@~5?RYy~bHrxFf_bPydVyMyDCZlQv) zYe6^uBKs;Cn5?p{EgN^BNQmT}Iq#f74THv?xg=Rgw7uHckSS|ZpYIzN=3QN$I}MSB zSw{h$LLXcind1}E4>D1xTox#q4;A6N%!geU?POZiJ&FjJ2(q2M#r8yMB5zOh6O_!3 zJtzvLOb$^JD5dv@f!}RVf?^AoLw#nt=^uNBgSo=_Lb5CNAD}OAgbW%ThCFv^9q+RL z8qJfleCzwmk2wxzF@@cU968wj!^0IzkAf2jp_UA&CF^ZnpPCEcQBrXZuE}+ zFar%%{@Jq|LfNj)P&5 z{$Cx-;t8YX=3>3yycuQ8HA%h|UeFRcxriOIxZ7uUaoh%tuo;M|Xx)RRA=GFg2PPm- zxg<)YVafOYHmS=szZp)${T^v`CYFz(X@LAm8tA2UQoU5!)%8G#(+bdcg=z9B&MFm8 z+lVlxRkT?JKy!?H{B}1by;nM!1*nI2+-D70-qYLAhkQfHd+Psro#dA)Q@bKo!HE$R zIAR=^(bx8Pw}&eGlj>qF*(VeE!wxDc8hJAREm_A-3X3N`Z&&--+N{t1^~@_-w>t8N zwGN_opzQ_Gu#YZ7qdfdQ#IG`GC6xj69*?LevGPzdN zm6^Hh)R8HAo=u77?SzDR)cX~J%1p@oR*>1f29*^QHNXCtyB3avH`Qaa921NfAV9AA z5@|>A3Yx&k;rlI%U@COYT^uO4aKgzsP+Mxbg6Ap+$FKLeK98@Hl%UJ*PCDqMOdZNn z#!J?u$w9o~W;8qgdREL=w$NDO2;bJcvJghb`4mTp{bLW zIlw`W1`~bW28q<@URB`fEJ_Li{Q^-e4wQnn%xn6Q7#jGPha5tCPZWx#s?6#61inn(!1UXD&&|%}OBCL` zR_s9|n+AFQHF&HMy29M-;{~rrrPfs$ z+CF?AB&dvZ5+9Ew7r7HHyi@;xD-@ujkL_$ZqWgaSc#7eg6yrn7(|A3Ymq=~zBf_|d zx_QO=@~kV=lYB0;T@a@}0x-=Txi>;^-zBN^EEapdYn(gV{6)fywA@P&r`wgR9eDA> z-Q-v)*1y6+*?Nb^3Nf|}r(#|}8DjXTxb%1>?8i6-n=4bZZ(jeLDGwGw(ltKp9r57$ zlFP%ZKO0g!b5e8<4&3F2e9Ipsq^>y}KP1!Y(=c%ZBlO*5?7fP)?#%6c-(adCX60_o zd$qixtHUurVD_hX8Oo5r3V7qaEap7!+kb#iNV~O;t8;(7IkFLnAsJW2&n!Sha8Efg zH=!5XlZ2g1F&5o&bH3{vnBqqAo_`nWo%r=}U=vfk_l>D5y&1VFJG6>?i}}E?rV{S5 zAzqh${^0{rq=h#VZOKn&uX<|hlUrMk_D$Y-{sU_e#cOi`B>z`^4V%owMM=~lK!T}mu<6^c zy-?<_d|Tw21URRP3JALkjYU(sGKBRr-fS87^tX{w-byoy(Y87=kzNQ3t|U=p+t z13r)~bI91R02WFre$)h8MGkK$ZB0V)@(r(d)U58ry63X#SE_WfOU6f`DobeZ7$7>X zGR*^+s;SU(@#b#nb6j6Q2^Ax=-)5e&uSUCKW^ogzgt#52;V4d&0~H1QscH(*4;HCM z>14)gpr!A0LJ@@_le#4(A{50&M(EUE@po?n6(-Ynz$80+8(d@KURE1}9f0{dRLxAI zk?SVi#}EXGpYbUs#4f1JN=`4wA(%?@aJU`K#gLbJ+s5)4sZ?vvyg_HTX27%;R!*W# zcSGpPHY)hh$U5oexb=t$2HuL)V&gGx>_6uG5>`H*j59Sutbqs{)56w%hYaWox! zapp3eadXTV0lhnELO!ooNVoO$cH})!r%im|$<_3!48hAc)qtnNYdNGgNvphBcpaY@!( zs0Sa7C6I7AMLOE7HNQt@>JTfCD#7e8AKN^^{M6N66ak|?Tk7q^(p&o&DpaO$6l{rR zlXzQ_>_<&TjJmeK<}o z9xmlDs(niB(%zKI#Z7Z5dOY*^SKE{u5W%jm)_6v=YS;6w&y-c6^q6UG>|xPtw5rG& z$QcXhZ!@$%a7j{K54er>Y1ndZ^B#pH=ujFOB*#X=B}A>je*-_;gOB59;ar&rEKx7j z9?K`^_|dF^$EH`!k;p#;ytJ|{d}&yaN)YQ)Aj$hT`k_%gEY$(_^z#qg@b19mk2QlY zrxo&*B;Rr1xa`fIsRrn2d4s&U(PRBWsF~v|)XZSw`1Y0F-S7Q+J}NIvA7R8;4a5y0qY-4(3xl9b=npAmOB56l3Wo1iwpIws=-C!tybRnRz3QwvdZk?VwFnBvs&kK%%oGhqr6P=Z~(4rz(iG(ntX+@9bX4 zd!BP9=iB=Mg=Q19sHxci#qu#AB9NO)I`e@3jhP)i6(+1$@0}hihW+Jpu=z9ePp^=? zaCK$?G@k=Vn~1md*6NB)Jfk<&AWNG04>*vtT}EOG=136N&XFRnKVKs+l_nz9C<1nq zaL%tt1wy{)(H*!e#|H6LAJv-H1Hy>IYC8F8=m#|QG5xOy9{|_xG4LA&m0&BaBYk+>3ag`!XxH(B|!@E+(@bv@G*V3SS)E zJD>TDG3y@oUfDH?&9jQ<)%0S*HIw#S{%a!$<2B!%2Pp$e!i6EO&Z$6SkjYwi0?AFi z@w`#ZpPp+Dy-cltU56Islzvkz`u;z_BL(@MXXci;Y5gnx2=@j?Aq(z3-Y?DjV%qbM z6c#@e6x_h<4T;Jd8)+&@HM}wzR!|a*hb6Hphbh5e4`#2wOU3GkUpyn_Y%bPlp5R}| zcS_+DvhIv@KcwBB9=V*o65&LS?GHa2I}^kpk2NpFs7p-nqm6%cI>HiDZ*vCmhsg`V z*0X!=3Uo8!pw#u_av_}s@PJNbgLl!Sq5fcM&7B!e#-#U4-wHIxC~syH(*7|v_SE|x zFSRs=kMvE9kh1+XQF`qJ2}U6<|M-rYa=KCjeK0J62;6Y+9!N|RKr=pJ zdM>{6P;$1xY`6Iu`boK3WxP}^MlE1TC6bR zco&4>dfi(R3~x3WSNCD6o*=b8)m=imSov$gbNYNZV*2{EhpV)G$tt~0%cl@DcTZ6UfYQan#({L<=BXmA|63TN+Q*|Y69gJ}Q(-;Re z><*9kdWdGnG0*Tq42Ih0L(t=qy08D#ajDo0fzlWN4x#Iqj@EHcY#>v@%+05e`mgzI z2Lh|ccMH5*3cMXHyjz#N#i`{bEIC*8xc4gG*PfM2Cmt2Ne%@Xs&La#A5hKeaI+T+{qT=T*_#DCq5GTNn#jE$=f!g9 zcljw?X*enF-c}Ze3+UBn`)Img(6p|w+oMyzh>FZZ9D}n*E$ewD<27E5_r1P7!b;!r zPmT?+=D$r`gD+$C0W_4_+>b8?mroL!_L;w3{)m*iBj03#-Kx5mi0@?B%3o!Hg2kX) zA5`{+=yx0ARY<*t4Dy{}rV18P*6jWOYHO={Zj@j?^_mw=R! zFer46NR2gvB;-B??_g;}iTQCfP`L(9e^LPbWVXBCT!@dQ>`=D9;^EP597{u|lGNM0 z#T0M3aO{OwgbTF7|FuHJ^U}=CL(ZP`2}xDn6}4{ohAd6yYkSZ8)k`*07gW!9bl&en z0JnZ?z*zMd0p@2p0;`LIVTMO$y$D{Ni-U)*ER27n8Vdg^lOv);uCU$;K7(!CR$fUV z`7%GQxg&I@BSO0z#@=Z_n|2ETemVgA)1t6rK(e^o%-tI!`I1h`vFnkbT(_^mk$J!C z-QSmuAu>DVc5^IM+5y^fSrTo*m_{y*wvO>a;%ECRM5^N zN$K3BT|K=t_F`0GUUBKL3BD!VpLaEExersCJ7DMN-(MchokkF-st+hoaEWS$QZxbu z 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 *92sHTuOt-5E!s%yu4kFYmU=%Z-m&){VdwQ75z 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 max_tries: + print("[CORENLP] ERROR! Too many attempts") + sys.exit(1) + + try: + r = requests.post("http://0.0.0.0:5604/?properties={\"annotators\": \"tokenize,ssplit,pos,ner,regexner," + "sentiment\"}&pipelineLanguage=en", + + headers={"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"}, + data=urllib.parse.quote_plus("The quick brown fox jumped over the lazy dog") + ) + if r.status_code == 200: + print("[CORENLP] OK") + break + else: + print("[CORENLP] Failed, Returned status code {0}, '{1}'".format(str(r.status_code), r.text)) + except: + print("[CORENLP] Failed, request not completed") + pass + + print("[CORENLP] Waiting 10 seconds") + time.sleep(10) + current_tries += 1 + + print("[CORENLP] Started successfully") + + +def langdetect(): + print("[LANGDETECT] Warming up") + + current_tries = 0 + max_tries = 30 # 5 Minutes + while True: + if current_tries > max_tries: + print("[LANGDETECT] ERROR! Too many attempts") + sys.exit(1) + + try: + r = requests.post("http://0.0.0.0:5606/", data={"input": "The quick brown fox jumped over the lazy dog"}) + if r.status_code == 200: + print("[LANGDETECT] OK") + break + else: + print("[LANGDETECT] Failed, Returned status code {0}, '{1}'".format(str(r.status_code), r.text)) + except: + print("[LANGDETECT] Failed, request not completed") + pass + + print("[LANGDETECT] Waiting 10 seconds") + time.sleep(10) + current_tries += 1 + + print("[LANGDETECT] Started successfully") + + +def spamdetect(): + print("[SPAMDETECT] Warming up") + + current_tries = 0 + max_tries = 30 # 5 Minutes + while True: + if current_tries > max_tries: + print("[SPAMDETECT] ERROR! Too many attempts") + sys.exit(1) + + try: + r = requests.post("http://0.0.0.0:5601/", data={"input": "The quick brown fox jumped over the lazy dog"}) + if r.status_code == 200: + print("[SPAMDETECT] OK") + break + else: + print("[SPAMDETECT] Failed, Returned status code {0}, '{1}'".format(str(r.status_code), r.text)) + except: + print("[SPAMDETECT] Failed, request not completed") + pass + + print("[SPAMDETECT] Waiting 10 seconds") + time.sleep(10) + current_tries += 1 + + print("[SPAMDETECT] Started successfully") + + +def nsfw(): + print("[NSFW] Warming up") + + current_tries = 0 + max_tries = 30 # 5 Minutes + + import os + print() + + with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), "red.jpg"), "rb") as img_file: + image_data = base64.b64encode(img_file.read()).decode('utf-8') + + while True: + if current_tries > max_tries: + print("[NSFW] ERROR! Too many attempts") + sys.exit(1) + + try: + r = requests.post("http://0.0.0.0:5601/", data={ + "input": image_data, + "type": "jpg" + }) + if r.status_code == 200: + print("[NSFW] OK") + break + else: + print("[NSFW] Failed, Returned status code {0}, '{1}'".format(str(r.status_code), r.text)) + except: + print("[NSFW] Failed, request not completed") + pass + + print("[NSFW] Waiting 10 seconds") + time.sleep(10) + current_tries += 1 + + print("[NSFW] Started successfully") + + +print(" ( ) ( ) )") +print(" ) ( ) ( (") +print(" ( ) ( ) )") +print(" _____________") +print(" <_____________> ___") +print(" | |/ _ \\") +print(" | | | |") +print(" | |_| |") +print(" ___| |\___/") +print("/ \___________/ \\") +print("\_____________________/") +print() +print("CoffeeHouse-Utils Warmup") + +core_nlp() +spamdetect() +langdetect() +nsfw() + +print("OK, CoffeeHouse-Utils seems to be running fine.") +print("Exiting with code 0, the ping service should start in the next step.") +sys.exit(0) \ No newline at end of file diff --git a/services/ping_service/coffeehouse_ping/__init__.py b/services/ping_service/coffeehouse_ping/__init__.py new file mode 100644 index 00000000..c0094195 --- /dev/null +++ b/services/ping_service/coffeehouse_ping/__init__.py @@ -0,0 +1,4 @@ +from . import server +from .server import * + +__all__ = ["Server"] \ No newline at end of file diff --git a/services/ping_service/coffeehouse_ping/__main__.py b/services/ping_service/coffeehouse_ping/__main__.py new file mode 100644 index 00000000..94c3c975 --- /dev/null +++ b/services/ping_service/coffeehouse_ping/__main__.py @@ -0,0 +1,50 @@ +import sys + +from coffeehouse_ping import Server + + +def _real_main(argv=None): + """ + The main command-line processor + + :param argv: + :return: + """ + if argv[1] == '--help': + _help_menu(argv) + if argv[1] == '--start-server': + _start_server(argv) + + +def _start_server(argv=None): + """ + Starts the server + + :param argv: + :return: + """ + server = Server() + server.start() + + +def _help_menu(argv=None): + """ + Displays the help menu and commandline usage + + :param argv: + :return: + """ + print( + "CoffeeHouse Ping CLI\n\n" + " --help\n" + " --start-server\n" + ) + sys.exit() + + + +if __name__ == '__main__': + try: + _real_main(sys.argv) + except KeyboardInterrupt: + print('\nInterrupted by user') diff --git a/services/ping_service/coffeehouse_ping/server.py b/services/ping_service/coffeehouse_ping/server.py new file mode 100644 index 00000000..dedf987b --- /dev/null +++ b/services/ping_service/coffeehouse_ping/server.py @@ -0,0 +1,44 @@ +from hyper_internal_service import web + +__all__ = ['Server'] + + +class Server(object): + + def __init__(self, port=5600): + """ + Public Constructor + :param port: + """ + self.port = port + self.web_application = web.Application() + self.web_application.add_routes( + [web.post('/', self.ping)] + ) + + async def ping(self, request): + """ + Handles the predict request "/", usage: + POST:: "input": str + :param request: + :return: + """ + post_data = await request.post() + return web.json_response({"status": True}) + + def start(self): + """ + Starts the web application + :return: + """ + web.run_app(app=self.web_application, port=self.port) + return True + + def stop(self): + """ + Stops the web application + :return: + """ + self.web_application.shutdown() + self.web_application.cleanup() + return True \ No newline at end of file diff --git a/services/ping_service/setup.py b/services/ping_service/setup.py new file mode 100644 index 00000000..a33f8b13 --- /dev/null +++ b/services/ping_service/setup.py @@ -0,0 +1,16 @@ +from setuptools import setup, find_packages +from setuptools.command.install import install + + +setup( + name='coffeehouse_ping', + version='1.0.0', + description='Provides an endpoint for programs to ping for CoffeeHouse-Utils', + url='https://github.com/Intellivoid/CoffeeHousePy', + author='Zi Xing Narrakas', + author_email='netkas@intellivoid.info', + classifiers=[ + 'Development Status :: 3 - Internal/Alpha' + ], + packages=find_packages() +) diff --git a/test.py b/test.py new file mode 100644 index 00000000..e09d2d83 --- /dev/null +++ b/test.py @@ -0,0 +1,2 @@ +import os +print(os.path.dirname(os.path.realpath(__file__)))