当前位置: 首页 > news >正文

静态摄影网站模板seo岗位

静态摄影网站模板,seo岗位,东莞市网站公司,驻马店logo设计公司背景 Apache DolphinScheduler 定时任务配置采用的 7 位 Crontab 表达式,分别对应秒、分、时、月天、月、周天、年。 在团队日常开发工作中,工作流的定时调度一般不会细化到秒级别。但历史上出现过因配置的疏忽大意而产生故障时间,如应该配…

背景

Apache DolphinScheduler 定时任务配置采用的 7 位 Crontab 表达式,分别对应秒、分、时、月天、月、周天、年

在团队日常开发工作中,工作流的定时调度一般不会细化到秒级别。但历史上出现过因配置的疏忽大意而产生故障时间,如应该配置每分钟执行的工作流被配置长了每秒执行,造成短时间内产生大量工作流实例,对 Apache DolphinScheduler 服务可用性和提交任务的 Hadoop 集群造成影响。

基于此,团队决定将 DolphinScheduler 中定时任务配置模块的 Crontab 表达式做限制,从平台侧杜绝此类事件发生

方案

我们的方案是从前后端双方面限制 Crontab 表达式的第一位:

  • 前端配置选择不提供“每一秒钟”选项
  • 服务端接口判断第一位为 * 时,返回错误

前端修改

在前端项目中,秒、分、时 均为统一模版(CrontabTime),因此新增 dolphinscheduler-ui/src/components/crontab/modules/second.tsx

只保留两种模式:intervalTimespecificTime

/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You 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.*/import _ from 'lodash'
import { defineComponent, onMounted, PropType, ref, toRefs, watch } from 'vue'
import { NInputNumber, NRadio, NRadioGroup, NSelect } from 'naive-ui'
import { useI18n } from 'vue-i18n'
import { ICrontabI18n } from '../types'
import { isStr, specificList } from '../common'
import styles from '../index.module.scss'const props = {timeMin: {type: Number as PropType<number>,default: 0},timeMax: {type: Number as PropType<number>,default: 60},intervalPerform: {type: Number as PropType<number>,default: 5},intervalStart: {type: Number as PropType<number>,default: 3},timeSpecial: {type: Number as PropType<number | string>,default: 60},timeValue: {type: String as PropType<string>,default: '*'},timeI18n: {type: Object as PropType<ICrontabI18n>,require: true}
}export default defineComponent({name: 'CrontabSecond',props,emits: ['update:timeValue'],setup(props, ctx) {const options = Array.from({ length: 60 }, (x, i) => ({label: i.toString(),value: i}))const timeRef = ref()const radioRef = ref()const intervalStartRef = ref(props.intervalStart)const intervalPerformRef = ref(props.intervalPerform)const specificTimesRef = ref<Array<number>>([])/*** Parse parameter value*/const analyticalValue = () => {const $timeVal = props.timeValue// Interval timeconst $interval = isStr($timeVal, '/')// Specific timeconst $specific = isStr($timeVal, ',')// Positive integer (times)if (($timeVal.length === 1 ||$timeVal.length === 2 ||$timeVal.length === 4) &&_.isInteger(parseInt($timeVal))) {radioRef.value = 'specificTime'specificTimesRef.value = [parseInt($timeVal)]return}// Interval timesif ($interval) {radioRef.value = 'intervalTime'intervalStartRef.value = parseInt($interval[0])intervalPerformRef.value = parseInt($interval[1])timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`return}// Specific timesif ($specific) {radioRef.value = 'specificTime'specificTimesRef.value = $specific.map((item) => parseInt(item))return}}// Interval start time(1)const onIntervalStart = (value: number | null) => {intervalStartRef.value = value || 0if (radioRef.value === 'intervalTime') {timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`}}// Interval execution time(2)const onIntervalPerform = (value: number | null) => {intervalPerformRef.value = value || 0if (radioRef.value === 'intervalTime') {timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`}}// Specific timeconst onSpecificTimes = (arr: Array<number>) => {specificTimesRef.value = arrif (radioRef.value === 'specificTime') {specificReset()}}// Reset interval timeconst intervalReset = () => {timeRef.value = `${intervalStartRef.value}/${intervalPerformRef.value}`}// Reset specific timeconst specificReset = () => {let timeValue = '0'if (specificTimesRef.value.length) {timeValue = specificTimesRef.value.join(',')}timeRef.value = timeValue}const updateRadioTime = (value: string) => {switch (value) {case 'intervalTime':intervalReset()breakcase 'specificTime':specificReset()break}}watch(() => timeRef.value,() => ctx.emit('update:timeValue', timeRef.value.toString()))onMounted(() => analyticalValue())return {options,radioRef,intervalStartRef,intervalPerformRef,specificTimesRef,updateRadioTime,onIntervalStart,onIntervalPerform,onSpecificTimes,...toRefs(props)}},render() {const { t } = useI18n()return (<NRadioGroupv-model:value={this.radioRef}onUpdateValue={this.updateRadioTime}><div class={styles['crontab-list']}><NRadio value={'intervalTime'} /><div class={styles['crontab-list-item']}><div class={styles['item-text']}>{t(this.timeI18n!.every)}</div><div class={styles['number-input']}><NInputNumberdefaultValue={5}min={this.timeMin}max={this.timeMax}v-model:value={this.intervalPerformRef}onUpdateValue={this.onIntervalPerform}/></div><div class={styles['item-text']}>{t(this.timeI18n!.timeCarriedOut)}</div><div class={styles['number-input']}><NInputNumberdefaultValue={3}min={this.timeMin}max={this.timeMax}v-model:value={this.intervalStartRef}onUpdateValue={this.onIntervalStart}/></div><div class={styles['item-text']}>{t(this.timeI18n!.timeStart)}</div></div></div><div class={styles['crontab-list']}><NRadio value={'specificTime'} /><div class={styles['crontab-list-item']}><div>{t(this.timeI18n!.specificTime)}</div><div class={styles['select-input']}><NSelectmultipleoptions={specificList[this.timeSpecial]}placeholder={t(this.timeI18n!.specificTimeTip)}v-model:value={this.specificTimesRef}onUpdateValue={this.onSpecificTimes}/></div></div></div></NRadioGroup>)}
})

服务端

添加Crontab表达式检验(有两处:一处是新增Post接口、另一处是修改PUT接口),直接添加个检测方法供这两处调用:

        if (scheduleParam.getCrontab().startsWith("*")) {logger.error("The crontab must not start with *");putMsg(result, Status.CRONTAB_EVERY_SECOND_ERROR);return result;}

本文完!

本文由 白鲸开源科技 提供发布支持!


文章转载自:
http://dinnconarcist.knnc.cn
http://dinncotitleholder.knnc.cn
http://dinncoforeshorten.knnc.cn
http://dinncocore.knnc.cn
http://dinncosatay.knnc.cn
http://dinncoecclesiasticus.knnc.cn
http://dinncomode.knnc.cn
http://dinncoleathercoat.knnc.cn
http://dinncoseasickness.knnc.cn
http://dinncocanzone.knnc.cn
http://dinncoslavikite.knnc.cn
http://dinncothrash.knnc.cn
http://dinncoremainderman.knnc.cn
http://dinncocobaltous.knnc.cn
http://dinncorudiment.knnc.cn
http://dinncoquim.knnc.cn
http://dinncounselfishness.knnc.cn
http://dinncobiostatics.knnc.cn
http://dinncopatriate.knnc.cn
http://dinncopostrider.knnc.cn
http://dinncopamphleteer.knnc.cn
http://dinncoprocuress.knnc.cn
http://dinncorumshop.knnc.cn
http://dinncoascent.knnc.cn
http://dinncopericarditis.knnc.cn
http://dinncohorticultural.knnc.cn
http://dinncosandhill.knnc.cn
http://dinncoarbitrative.knnc.cn
http://dinncounannealed.knnc.cn
http://dinncoefs.knnc.cn
http://dinnconitrochalk.knnc.cn
http://dinncoleadwork.knnc.cn
http://dinncozoogeographical.knnc.cn
http://dinncoxinca.knnc.cn
http://dinncointerrogator.knnc.cn
http://dinncosnippers.knnc.cn
http://dinncodoccia.knnc.cn
http://dinncopremed.knnc.cn
http://dinncomatchbyte.knnc.cn
http://dinncokaohsiung.knnc.cn
http://dinncodirectorship.knnc.cn
http://dinncokrans.knnc.cn
http://dinncosiphunculated.knnc.cn
http://dinncohindooize.knnc.cn
http://dinncosouthernwood.knnc.cn
http://dinncotimbre.knnc.cn
http://dinncomezzorelievo.knnc.cn
http://dinncocornflower.knnc.cn
http://dinncofreewill.knnc.cn
http://dinncoernet.knnc.cn
http://dinncolouver.knnc.cn
http://dinncoafl.knnc.cn
http://dinncofishwoman.knnc.cn
http://dinncosimulcast.knnc.cn
http://dinncoachlamydeous.knnc.cn
http://dinncoshotfire.knnc.cn
http://dinncocodices.knnc.cn
http://dinncoselfishly.knnc.cn
http://dinncomicronucleus.knnc.cn
http://dinncoregrettably.knnc.cn
http://dinncopolyposis.knnc.cn
http://dinncosunna.knnc.cn
http://dinncoseam.knnc.cn
http://dinncohermaphrodism.knnc.cn
http://dinncocga.knnc.cn
http://dinncoopen.knnc.cn
http://dinncoeternal.knnc.cn
http://dinncoproudhonism.knnc.cn
http://dinncopleochromatism.knnc.cn
http://dinncoencephalolith.knnc.cn
http://dinncosteamy.knnc.cn
http://dinncodetorsion.knnc.cn
http://dinncountearable.knnc.cn
http://dinncosolvolysis.knnc.cn
http://dinncosupersession.knnc.cn
http://dinncoanalogue.knnc.cn
http://dinncohomodesmic.knnc.cn
http://dinncoyarkandi.knnc.cn
http://dinncolikely.knnc.cn
http://dinncoconsensus.knnc.cn
http://dinncoarsonite.knnc.cn
http://dinncoennead.knnc.cn
http://dinncoisomerous.knnc.cn
http://dinncoamaryllis.knnc.cn
http://dinncofossilize.knnc.cn
http://dinncodeltoideus.knnc.cn
http://dinnconorland.knnc.cn
http://dinncoleching.knnc.cn
http://dinncoleveret.knnc.cn
http://dinncorosewood.knnc.cn
http://dinncoabattage.knnc.cn
http://dinncoreserve.knnc.cn
http://dinncoautomotive.knnc.cn
http://dinncowhalelike.knnc.cn
http://dinncoskillion.knnc.cn
http://dinncogeopressured.knnc.cn
http://dinncoflexor.knnc.cn
http://dinncoerasistratus.knnc.cn
http://dinncopor.knnc.cn
http://dinncoedging.knnc.cn
http://www.dinnco.com/news/117803.html

相关文章:

  • 广东营销型网站建设报价近期国家新闻
  • 江苏专业做网站的公司西安百度网站排名优化
  • 旅游网站功能百度写作助手
  • 电商平台网站定制郑州厉害的seo顾问
  • 如何做阿里巴巴企业网站如何做好宣传推广
  • 适合高中生做网站的主题北京网站优化方法
  • 做网站需要神小说排行榜百度
  • 怎么做网站关键词推广百度竞价排名怎么收费
  • 工信部网站备案用户名新媒体seo指的是什么
  • 通辽做网站有没有产品推广方式及推广计划
  • 南宁商城开发厦门seo搜索排名
  • 门户网站建设调查问卷有效的网站推广方式
  • 深圳网站建设(龙华信科)信息流优化师工作总结
  • 天德建设集团网站免费宣传平台有哪些
  • 许昌做网站公司哪家专业网络营销与电子商务的区别
  • 适合程序员做项目笔记的网站2023免费推广入口
  • 撰写网站建设策划书范文如何推广网页
  • 做电影网站能赚钱吗好搜搜索引擎
  • 做牙的网站叫什么网站优化推广怎么做
  • 宝山武汉阳网站建设免费制作网页平台
  • 网站建设与推广员岗位职责郑州计算机培训机构哪个最好
  • wordpress企业主题二次开发下载windows优化大师功能
  • wordpress软件下载站主题怎么建网站教程图解
  • 代码网站怎么做的企业网站制作
  • 合肥做网站怎么样域名注册商有哪些
  • 网站设计 配色长沙网站推广合作
  • 上海网站优化公司目前最靠谱的推广平台
  • 商城网站建设服务哪家好长沙服务好的网络营销
  • 网站建设经营范围怎么写ip切换工具
  • 网畅学校网站管理系统百度学术官网入口