APP灰度发布策略
def gray_publish_check(app_lastest_pub_time, device_id): '''灰度发布策略: 将device_id进行hash后转为十进制数,若想要10%的用户收到升级提示, 则需保证这个十进制数的最后一位为0-9中固定的一个数(每个数出现的概率为1/10,按0-9的顺序) 若想要30%的用户收到提示则保证最后一个数是0-9中的某三个数中之一。 若1%,则同理的限定末尾两个数,1/10 * 1/10 = 1/100 规则: 这里通过GRAY_PUBLISH_PROBABILITY设置的比例小数控制升级率, 只支持0.1-1.0(step=0.1) 0.01-1.0(step=0.01) ... 0.15这种是不允许的。 实现方法: 将device_id使用md5进行hash 将其hex字符串转换为十进制数 将比例控制的小数转为字符串 验证其格式时候符合规则 如果比例为1这全部都会进行灰度发布 将比例小数的字符串按照小数点分为两部分,主要通过小数部分进行控制 通过小数部分转为整数后的值判断具体的分子(百分之多少和千分之多少) 通过小数部分的字符串长度判断具体的分母(百分之还是千分之) 比如0.2,小数转整为2,长度为1,则为20%,即只需确定十进制字符串的最后一位是否在0或1 比如0.03,小数部分转正为3,长度为2,则为3/100,即只需确定最后两位即可: 1.最后一位在[0-2]之中 3/10 2.倒数第二位为固定值0 1/10 ''' # 三天内全部发完,第一天10%的用户可以收到更新提醒,第二天30%的用户收到更新提醒,第三天全部都会收到更新提醒 app_publish_date = datetime.datetime.strptime(app_lastest_pub_time, '%Y-%m-%d').date() today = datetime.date.today() if today - app_publish_date <= datetime.timedelta(days=1): gray_probability = 0.1 elif today - app_publish_date == datetime.timedelta(days=2): gray_probability = 0.3 elif today - app_publish_date >= datetime.timedelta(days=3): gray_probability = 1.0 digits = '0123456789' device_id_hex = hashlib.md5(device_id).hexdigest() device_id_decimalism_str = str(int(device_id_hex, 16)) gray_publish_probability = str(gray_probability) digit, decimal = gray_publish_probability.split('.') if int(digit) == 1: return True if device_id_decimalism_str[-1] in digits[:int(decimal)]: # 判断最后一位 # 小数长度大于1,即1/100, 1/1000 ...判断倒数第2,3...位是否为0 if len(decimal) > 1: return all(device_id_decimalism_str[-len(decimal) + i] == '0' for i in range(len(decimal) - 1)) else: return True return False
当检测到APP有新版本并且gray_publish_check
为True
时提示有新版本可以下载更新。
网友216.*.*.226[Seattle]2021-01-24 07:12
网友54.*.*.97[法国]2021-01-24 07:10
网友220.*.*.178[北京]2021-01-24 06:50
网友203.*.*.98[火星]2021-01-24 06:44
发表评论
亲~ 评论内容是必须的哟! o(∩_∩)o
昵称
邮箱
主页
评论