mirror of
				https://github.com/ivanch/tcc.git
				synced 2025-10-30 09:07:36 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			ed9942d56e
			...
			274fe5252a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 274fe5252a | |||
| e547ae41d4 | |||
| a920b36386 | 
| @@ -15,18 +15,6 @@ namespace TCC.Controllers | |||||||
|             this.ImageService = imageService; |             this.ImageService = imageService; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         [HttpGet("load-small-image")] |  | ||||||
|         public async Task<IActionResult> GetSimpleImage() |  | ||||||
|         { |  | ||||||
|             return File(ImageService.GetSimpleImage(), "image/png"); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         [HttpGet("load-big-image")] |  | ||||||
|         public async Task<IActionResult> GetBigImage() |  | ||||||
|         { |  | ||||||
|             return File(ImageService.GetBigImage(), "image/png"); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         [HttpPost("save-big-image")] |         [HttpPost("save-big-image")] | ||||||
|         public async Task<IActionResult> SaveBigImage() |         public async Task<IActionResult> SaveBigImage() | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -10,15 +10,5 @@ | |||||||
|             fileStream.CopyToAsync(file); |             fileStream.CopyToAsync(file); | ||||||
|             file.Close(); |             file.Close(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public byte[] GetSimpleImage() |  | ||||||
|         { |  | ||||||
|             return File.ReadAllBytes("static/small-image.png"); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         public byte[] GetBigImage() |  | ||||||
|         { |  | ||||||
|             return File.ReadAllBytes("static/big-image.png"); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,9 @@ | |||||||
| FROM rust:latest | FROM rust:1.77-buster as builder | ||||||
|  | WORKDIR /app | ||||||
|  | COPY . . | ||||||
|  | RUN cargo build --release | ||||||
|  |  | ||||||
|  | FROM debian:bullseye-slim | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  |  | ||||||
| RUN apt-get update && apt-get -y install wget && \ | RUN apt-get update && apt-get -y install wget && \ | ||||||
| @@ -7,17 +11,12 @@ RUN apt-get update && apt-get -y install wget && \ | |||||||
|     wget https://files.ivanch.me/api/public/dl/jNlXYMLR/big-image.png && \ |     wget https://files.ivanch.me/api/public/dl/jNlXYMLR/big-image.png && \ | ||||||
|     wget https://files.ivanch.me/api/public/dl/QdKvaeQI/video.mp4 && \ |     wget https://files.ivanch.me/api/public/dl/QdKvaeQI/video.mp4 && \ | ||||||
|     wget https://files.ivanch.me/api/public/dl/YD4vmSsO/nginx.html && \ |     wget https://files.ivanch.me/api/public/dl/YD4vmSsO/nginx.html && \ | ||||||
|  |     mkdir -p ./static && \ | ||||||
| COPY . . |  | ||||||
|  |  | ||||||
| RUN cargo build --release && \ |  | ||||||
|     cp ./target/release/ActixAPI . && \ |  | ||||||
|     mv small-image.png ./static && \ |     mv small-image.png ./static && \ | ||||||
|     mv big-image.png ./static && \ |     mv big-image.png ./static && \ | ||||||
|     mv video.mp4 ./static && \ |     mv video.mp4 ./static && \ | ||||||
|     mv nginx.html ./static && \ |     mv nginx.html ./static | ||||||
|     ldconfig /usr/local/lib |  | ||||||
|  |  | ||||||
| ENV LD_LIBRARY_PATH=/usr/local/lib | COPY --from=builder /app/target/release/ActixAPI . | ||||||
|  |  | ||||||
| ENTRYPOINT ["./ActixAPI"] | CMD ["./ActixAPI"] | ||||||
| @@ -64,26 +64,10 @@ async fn simulation_protobuf(msg: ProtoBuf<PersonProtobuf>) -> impl Responder { | |||||||
|     HttpResponse::Ok().protobuf(msg.0) |     HttpResponse::Ok().protobuf(msg.0) | ||||||
| } | } | ||||||
|  |  | ||||||
| #[get("/image/load-small-image")] |  | ||||||
| async fn load_small_image() -> Result<NamedFile> { |  | ||||||
|     let real_path = "static/small-image.png"; |  | ||||||
|  |  | ||||||
|     Ok(NamedFile::open(real_path)?) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[get("/image/load-big-image")] |  | ||||||
| async fn load_big_image() -> Result<NamedFile> { |  | ||||||
|     let real_path = "static/big-image.png"; |  | ||||||
|  |  | ||||||
|     Ok(NamedFile::open(real_path)?) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[post("/image/save-big-image")] | #[post("/image/save-big-image")] | ||||||
| async fn save_big_image(image_data: web::Bytes) -> Result<HttpResponse> { | async fn save_big_image(image_data: web::Bytes) -> Result<HttpResponse> { | ||||||
|     // Write bytes to file |  | ||||||
|     std::fs::write("image.png", &image_data).unwrap(); |     std::fs::write("image.png", &image_data).unwrap(); | ||||||
|  |  | ||||||
|     // Return the blurred image bytes |  | ||||||
|     Ok(HttpResponse::Ok() |     Ok(HttpResponse::Ok() | ||||||
|         .content_type("application/json") |         .content_type("application/json") | ||||||
|         .body("{\"status\": 200}")) |         .body("{\"status\": 200}")) | ||||||
| @@ -97,8 +81,6 @@ async fn main() -> std::io::Result<()> { | |||||||
|         App::new() |         App::new() | ||||||
|             .route("/static/{filename:.*}", web::get().to(static_serve)) |             .route("/static/{filename:.*}", web::get().to(static_serve)) | ||||||
|             .service(hello) |             .service(hello) | ||||||
|             .service(load_small_image) |  | ||||||
|             .service(load_big_image) |  | ||||||
|             .service(save_big_image) |             .service(save_big_image) | ||||||
|             .service(simulation_harmonic_progression) |             .service(simulation_harmonic_progression) | ||||||
|             .service(simulation_json) |             .service(simulation_json) | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								Express
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								Express
									
									
									
									
									
								
							 Submodule Express updated: 3a54792794...930a322dfa
									
								
							| @@ -5,22 +5,6 @@ from flask import request, Response, Blueprint, jsonify, send_file | |||||||
| image_blueprint = Blueprint('image_blueprint', __name__) | image_blueprint = Blueprint('image_blueprint', __name__) | ||||||
| image_service = ImageService() | image_service = ImageService() | ||||||
|  |  | ||||||
| @image_blueprint.route('/image/load-small-image', methods=['GET']) |  | ||||||
| def get_simple_image(): |  | ||||||
|     return send_file(io.BytesIO(image_service.get_simple_image()), |  | ||||||
|                      mimetype='image/png', |  | ||||||
|                      as_attachment=True, |  | ||||||
|                      download_name='small-image.png') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @image_blueprint.route('/image/load-big-image', methods=['GET']) |  | ||||||
| def get_big_image(): |  | ||||||
|     return send_file(io.BytesIO(image_service.get_big_image()), |  | ||||||
|                      mimetype='image/png', |  | ||||||
|                      as_attachment=True, |  | ||||||
|                      download_name='big-image.png') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @image_blueprint.route('/image/save-big-image', methods=['POST']) | @image_blueprint.route('/image/save-big-image', methods=['POST']) | ||||||
| def save_image(): | def save_image(): | ||||||
|     image_service.save_image(request.get_data()) |     image_service.save_image(request.get_data()) | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| Flask>=1.0 | Flask==3.0 | ||||||
| gunicorn>=19.9.0 | gunicorn==19.9.0 | ||||||
| protobuf>=4.25.0 | protobuf==4.25.0 | ||||||
							
								
								
									
										2
									
								
								Spring
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								Spring
									
									
									
									
									
								
							 Submodule Spring updated: 281dc59716...1c28f5c8e3
									
								
							| @@ -34,14 +34,14 @@ ENDPOINTS = { | |||||||
|     'Spring': 'http://localhost:9085', |     'Spring': 'http://localhost:9085', | ||||||
| } | } | ||||||
|  |  | ||||||
| AVG_RUNS = 5 | AVG_RUNS = 30 | ||||||
|  |  | ||||||
| API_REQUESTS = [ | API_REQUESTS = [ | ||||||
|     ('/status/ok', 'GET', range(0, 30_000, 5000), None), |     ('/status/ok', 'GET', range(0, 30_000, 5000), None), | ||||||
|     ('/simulation/harmonic-progression?n=100000', 'GET', range(0, 30_000, 5000), None), |     ('/simulation/harmonic-progression?n=100000', 'GET', range(0, 30_000, 5000), None), | ||||||
|     # ('/simulation/json', 'POST', range(0, 30_000, 5000), (person_json, "application/json")), |     ('/simulation/json', 'POST', range(0, 30_000, 5000), (person_json, "application/json")), | ||||||
|  |     ('/simulation/protobuf', 'POST', range(0, 30_000, 5000), (person_proto, "application/protobuf")), | ||||||
|     ('/image/save-big-image', 'POST', range(0, 500, 50), (open('big-image.png', 'rb').read(), "image/png")), |     ('/image/save-big-image', 'POST', range(0, 500, 50), (open('big-image.png', 'rb').read(), "image/png")), | ||||||
|     ('/static/small-image.png', 'GET', range(0, 30_000, 5000), None), |     ('/static/small-image.png', 'GET', range(0, 30_000, 5000), None), | ||||||
|     ('/static/big-image.png', 'GET', range(0, 500, 50), None), |     ('/static/big-image.png', 'GET', range(0, 500, 50), None), | ||||||
|     # ('/simulation/protobuf', 'POST', range(0, 30_000, 5000), (person_proto, "application/protobuf")), |  | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -10,19 +10,20 @@ FRAMEWORKS = [f for f, _, _ in FRAMEWORKS] | |||||||
| def setBoxColors(bp): | def setBoxColors(bp): | ||||||
|     for i, box in enumerate(bp['boxes']): |     for i, box in enumerate(bp['boxes']): | ||||||
|         box.set(color=FRAMEWORKS_COLORS[i]) |         box.set(color=FRAMEWORKS_COLORS[i]) | ||||||
|     for i, median in enumerate(bp['medians']): |         box.set(facecolor=FRAMEWORKS_COLORS[i]) | ||||||
|         # median.set(color=FRAMEWORKS_COLORS[i]) |  | ||||||
|         median.set(color='white') |  | ||||||
|  |  | ||||||
|     for i in range(len(FRAMEWORKS)): |     for i in range(len(FRAMEWORKS)): | ||||||
|         bp['whiskers'][i*2].set(color=FRAMEWORKS_COLORS[i]) |         bp['whiskers'][i*2].set(color=FRAMEWORKS_COLORS[i]) | ||||||
|         bp['whiskers'][i*2 + 1].set(color=FRAMEWORKS_COLORS[i]) |         bp['whiskers'][i*2 + 1].set(color=FRAMEWORKS_COLORS[i]) | ||||||
|     for i in range(len(FRAMEWORKS)): |     for i in range(len(FRAMEWORKS)): | ||||||
|         bp['caps'][i*2].set(color=FRAMEWORKS_COLORS[i]) |         bp['caps'][i*2].set(color=FRAMEWORKS_COLORS[i]) | ||||||
|         bp['caps'][i*2 + 1].set(color=FRAMEWORKS_COLORS[i]) |         bp['caps'][i*2 + 1].set(color=FRAMEWORKS_COLORS[i]) | ||||||
|  |     for i, median in enumerate(bp['medians']): | ||||||
|  |         median.set(color='white') | ||||||
|  |  | ||||||
|  |  | ||||||
| def plot_graph(x_data, y_data, title, x_label, y_label, filename, y_lim = None): | def plot_graph(x_data, y_data, title, x_label, y_label, filename, y_lim = None): | ||||||
|  |     print(filename) | ||||||
|  |  | ||||||
|     old_x_data = x_data |     old_x_data = x_data | ||||||
|     old_y_data = y_data |     old_y_data = y_data | ||||||
|  |  | ||||||
| @@ -39,40 +40,20 @@ def plot_graph(x_data, y_data, title, x_label, y_label, filename, y_lim = None): | |||||||
|         for f in range(len(FRAMEWORKS)): |         for f in range(len(FRAMEWORKS)): | ||||||
|             y_data[-1][f].append(old_y_data[f][i]) |             y_data[-1][f].append(old_y_data[f][i]) | ||||||
|  |  | ||||||
|     fig = figure() |     fig, axes = plt.subplots(ncols=len(x_data), sharey=True) | ||||||
|     ax = axes() |  | ||||||
|  |  | ||||||
|     all_positions = [] |     for ax, j in zip(axes, [i for i in range(len(x_data))]): | ||||||
|  |         bp = ax.boxplot(y_data[j], showfliers=False, patch_artist=True, positions=[i for i in range(len(FRAMEWORKS))]) | ||||||
|     print(filename) |         ax.set(xlabel=x_data[j], xticklabels=['' for _ in range(len(FRAMEWORKS))]) | ||||||
|     # print(y_data) |         ax.margins(0.05) | ||||||
|     for j in range(len(x_data)): |  | ||||||
|         positions = [len(FRAMEWORKS)*j + i + 2*j for i in range(len(FRAMEWORKS))] |  | ||||||
|  |  | ||||||
|         bp = boxplot(y_data[j], positions = positions, widths = 0.6, showfliers=False, |  | ||||||
|                      patch_artist=True) |  | ||||||
|         all_positions.append(positions) |  | ||||||
|         setBoxColors(bp) |         setBoxColors(bp) | ||||||
|  |         if j % 2 == 1: | ||||||
|  |             ax.set_facecolor('#f2f2f2') | ||||||
|  |  | ||||||
|     for i in range(len(FRAMEWORKS)): |     # set title | ||||||
|         medians = [] |     fig.suptitle(title) | ||||||
|         for j in range(len(x_data)): |     fig.supxlabel(x_label) | ||||||
|             medians.append(np.median(y_data[j][i])) |     fig.supylabel(y_label) | ||||||
|  |  | ||||||
|         positions = [all_positions[x][i] for x in range(len(x_data))] |  | ||||||
|         plt.plot(positions, medians, color=FRAMEWORKS_COLORS[i], marker='.', linestyle='--', linewidth=0.3) |  | ||||||
|  |  | ||||||
|     avg_positions = [] |  | ||||||
|     for positions in all_positions: |  | ||||||
|         avg = np.average(positions) |  | ||||||
|         avg_positions.append(avg) |  | ||||||
|  |  | ||||||
|     ax.set_xticks(avg_positions) |  | ||||||
|     ax.set_xticklabels([str(x) for x in x_data]) |  | ||||||
|  |  | ||||||
|     plt.title(title) |  | ||||||
|     plt.xlabel(x_label) |  | ||||||
|     plt.ylabel(y_label) |  | ||||||
|  |  | ||||||
|     if y_lim: |     if y_lim: | ||||||
|         plt.ylim(y_lim) |         plt.ylim(y_lim) | ||||||
| @@ -85,6 +66,7 @@ def plot_graph(x_data, y_data, title, x_label, y_label, filename, y_lim = None): | |||||||
|         plt.legend() |         plt.legend() | ||||||
|  |  | ||||||
|     plt.tight_layout() |     plt.tight_layout() | ||||||
|  |     fig.subplots_adjust(hspace=0, wspace=0) | ||||||
|     plt.savefig(f'{filename}.png') |     plt.savefig(f'{filename}.png') | ||||||
|  |  | ||||||
|     plt.clf() |     plt.clf() | ||||||
|   | |||||||
| @@ -76,8 +76,6 @@ def run_tests(endpoint, method, num_requests, metadata): | |||||||
|                 start_time = time.time() |                 start_time = time.time() | ||||||
|  |  | ||||||
|                 futures = [] |                 futures = [] | ||||||
|                 #with requests.Session() as session: |  | ||||||
|                 #    futures = [executor.submit(send_request, session, url) for _ in range(num_request)] |  | ||||||
|  |  | ||||||
|                 half = floor(num_request/2) |                 half = floor(num_request/2) | ||||||
|                 for i in range(num_request): |                 for i in range(num_request): | ||||||
| @@ -104,7 +102,7 @@ def run_tests(endpoint, method, num_requests, metadata): | |||||||
|             record(files[0], num_request, f"{num_request/elapsed_time:.2f}") |             record(files[0], num_request, f"{num_request/elapsed_time:.2f}") | ||||||
|             record_resource(files[1], num_request, cpu, ram) |             record_resource(files[1], num_request, cpu, ram) | ||||||
|  |  | ||||||
|             time.sleep(3) |             time.sleep(30) | ||||||
|  |  | ||||||
| def get_resource_usage(): | def get_resource_usage(): | ||||||
|     if CONTAINER_NAME == "": return 0, 0 |     if CONTAINER_NAME == "": return 0, 0 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user