Stable-Diffusion-UI-Agones/cloud-function/main.py (62 lines of code) (raw):

# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from flask import escape import functions_framework import redis import time import os import socket @functions_framework.http def redis_http(request): redis_host = os.getenv("REDIS_HOST", "127.0.0.1") time_interval = os.getenv("TIME_INTERVAL", 900) time_interval = int(time_interval) if redis_host == "127.0.0.1": print("please correct your redis_host setting!") return "please correct your redis_host setting!" client = redis.StrictRedis(host=redis_host) cursor = '0' MESSAGE = "EXIT" while cursor != 0: try: cursor, keys = client.scan(cursor=cursor) except Exception as e: print("please check your redis connection setting!") return "please check your redis connection setting!" for key in keys: result = client.hgetall(key) last_access = int(result[b'lastaccess'].decode('utf-8')) current_time = int(time.time()) if current_time - last_access >= time_interval: try: host_info = result[b'port'].decode('utf-8').split(":") UDP_IP = host_info[0] UDP_PORT = host_info[1] sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # loop = 0 while loop < 3: sock.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP, int(UDP_PORT))) sock.settimeout(0.5) try: data, address = sock.recvfrom(1024) except socket.timeout: print("timeout to close runtime on {}:{}! please check your firewall config!".format(UDP_IP, UDP_PORT)) loop = loop + 1 if loop == 3: sock.close() continue if MESSAGE in data.decode('utf-8'): print("successed to close runtime on {}:{}!".format(UDP_IP, UDP_PORT)) sock.close() break else: loop = loop + 1 except Exception as e: print(e) print("failed to close runtime on {}:{}!".format(UDP_IP, UDP_PORT)) return "failed to close runtime on {}:{}!".format(UDP_IP, UDP_PORT) try: client.delete(key) except Exception as e: print(e) print("failed to clear key {}!".format(key)) return "failed to clear key {}!".format(key) return "success tracking!"