我已经创建了一个 cron 作业并将其推送到部署,但是当我看到它在 OpenShift 中运行时,我收到以下错误消息:
无法确定是否需要启动作业:错过启动时间太多 (> 100)。设置或减少 .spec.startingDeadlineSeconds 或检查时钟偏差。
根据我的理解,作业无法运行。但我不明白为什么它失败了。为什么没有记录在某处?- 或者如果是,我在哪里可以找到它?
CronJob 控制器将继续尝试根据最近的计划开始作业,但一直失败,显然它已经这样做了 100 次以上。
我检查了我的 cron 作业的语法,它没有给出任何错误。此外,如果有任何语法消息,我什至不允许推送。
有谁知道怎么了?
我的 Cron 工作:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cjob
labels:
job-name: my-cjob
spec:
schedule: "*/5 * * * *"
jobTemplate:
# activeDeadlineSeconds: 180 # 3 min <<- should this help and why?
spec:
template:
metadata:
name: my-cjob
labels:
job-name: my-cjob
spec:
containers:
- name: my-cjob
image: my-image-name
restartPolicy: OnFailure
Run Code Online (Sandbox Code Playgroud)
还是我应该使用startingDeadlineSeconds?任何遇到此错误消息并找到解决方案的人?
根据评论更新
运行时,kubectl get cronjob我得到以下信息:
NAME …Run Code Online (Sandbox Code Playgroud) 在我的解决方案中,我运行了单元测试,它们都通过了。然后,当我通过 TFS 提交时,有时会在有关项目之一的 TFS 构建步骤中显示以下内容:
Could not load type 'Castle.Proxies.HttpContextProxy' from assembly
'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=xxx'
Run Code Online (Sandbox Code Playgroud)
为什么错误仅有时显示?
我已经按照“无法从程序集错误加载类型”中的建议检查了 VS 中属性的“应用程序”选项卡下的所有程序集名称 - 还尝试清除我的 bin 文件夹,但没有任何反应 - tfs 中仍然偶尔显示错误-项目单元测试之一的构建步骤(在 VS17 中也从未显示)。
嗨,我正在尝试模拟 httpclient,显然是强迫它给我我需要的结果。问题是,在我的单元测试中,我必须模拟 httpClient 两次,每次都有不同的响应。
...
...
var httpReq = new HttpRequestMessage(
HttpMethod.Get,
$"{config["MY_TEST_ENDPOINT"]/site1}");
var myContent = await response.Content.ReadAsStringAsync();
var myFirstModel = JsonConvert.DeserializeObject<MyFirstModel>(myContent );
...
...
Run Code Online (Sandbox Code Playgroud)
我嘲笑这可能:
...
myMockedHttp
.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("[{'id':'0001'," +
"'name':'Jonah'," +
"'street':'Cambridge Street 1234'}]"
)
})
.Verifiable();
Run Code Online (Sandbox Code Playgroud)
这会给我一个响应,我可以反序列化和使用它 - 给它一个包含 3 个成员的对象:id、name 和 street。
这对我来说是一个问题 - 我也在同一个单元测试中进行了另一个 httpclient 调用,但我不知道如何模拟它。事情是这样的:
...
...
var httpReq = new HttpRequestMessage(
HttpMethod.Get,
$"{config["MY_TEST_ENDPOINT"]/site2}");
var httpResponseMsg = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 IConfiguration(Microsoft.Extensions.Configuration 包)注入 Program.cs 中,但不知道这是否可行,因此如果可能的话,显然不知道该怎么做。
我已经在其他项目的 Startup 类中完成了它,但在那里我只是做了一个简单的依赖注入,我没有发现在控制台应用程序中以相同的方式完成。
原因是,我需要访问 appsettings 中的一些关键值,以使用 SqlConnection 类 (System.Data.SqlClient) 访问我的数据库。
通常,我只是在 Startup.cs 中像这样添加它:
....
services.AddScoped(mysql => new SqlConnection($"and here goes my variables from appsettings..");
....
Run Code Online (Sandbox Code Playgroud)
我需要使用选项模式还是有更简单的方法?
c# configuration dependency-injection sqlconnection appsettings
我设置了一个 Grafana 警报,当我在图表中的值达到特定值时发出警报。
该值在一个月前达到,从那时起,该状态一直处于“警报”状态。
我显然想将此状态重置为“OK”,因为该事件发生在一个月前并已得到解决。
知道怎么做吗?
我已经截取了一些图表/面板和警报设置的屏幕截图,所以你可以看到我设置的内容。
主要目标是每次值超过 468 时收到警报。
我有一个 Grafana 仪表板,我尝试在其中绘制一些普罗米修斯指标。
我正在尝试使用以下公式计算 2 个端点的平均响应时间:
http_request_duration_seconds_sum / http_request_duration_seconds_count
Run Code Online (Sandbox Code Playgroud)
但是当将查询绘制到 Grafana 图形面板中时,我得到 4 个图形(每个图形 2 个),而不是只有 2 个,我不明白。
谁能告诉我,为什么有 4 条曲线而不是 2 条?顶部的两个来自同一个查询,底部的两个也来自同一个查询。
更新
正在添加
sum(rate(http_request_duration_sum))[24h] / sum(rate(http_request_duration_count))[24h]
Run Code Online (Sandbox Code Playgroud)
答案?这给了我 2 条曲线而不是 4 条,但不确定结果是否是我想要的(即端点的平均响应时间)。
我希望用户插入一个字符串作为参数,然后检查该字符串是否等于多个字符串之一。
我现在的做法是
....
if(stringParam != "text1" || stringParam != "text2" || stringParam != "text3"... stringParam != "text10")
....
Run Code Online (Sandbox Code Playgroud)
有没有办法可以写得更可读/更漂亮?可能有,但我想不出办法。
另外,字符串是大写还是小写并不重要。
c# ×4
dashboard ×2
grafana ×2
unit-testing ×2
alert ×1
appsettings ×1
assemblies ×1
compare ×1
cron ×1
devops ×1
jquery ×1
kubernetes ×1
logging ×1
moq ×1
openshift ×1
prometheus ×1
string ×1
tfs ×1
types ×1