我有一个托管的 Jenkins 服务器,从那里,我尝试使用 Jenkins REST API 获取所有作业的构建详细信息(如结果、时间戳、持续时间等),然后将其保存在我的数据库中。
现在,我正在从我的 Java 代码调用以下 API,以获取所有作业(大约 200 个作业):
https://<JENKINS_HOST>/api/json
然后我使用以下方法获取作业详细信息和每个作业的所有构建:
https://<JENKINS_HOST>/job/MY_JOB/api/json
最后,对于每个构建(我只需要获取最后 50 个),我必须调用它来获取构建详细信息:
https://<JENKINS_HOST>/job/MY_JOB/<BUILD_NUMBER>/api/json
所以总共有 50*200 + 201 = 超过 10000 个 API 调用。
我猜,这么多 API 调用会使 Jenkins 服务器执行缓慢?
所以,我的问题是有没有更快/更优化的方法来做到这一点,这样我就不必进行如此多的 API 调用?
就像我可以使用这样的一个 url 获取所有构建详细信息的地方:(假设)
https://<JENKINS_HOST>/job/MY_JOB/api/json?fetchAllbuildDetails=True
我有一个很大的 JSON 文件 (2.5MB),包含大约 80000 行。
它看起来像这样:
{
"a": 123,
"b": 0.26,
"c": [HUGE irrelevant object],
"d": 32
}
Run Code Online (Sandbox Code Playgroud)
我只希望为 keys 存储整数值a,b并d忽略 JSON 的其余部分(即忽略值中的任何内容c)。
我无法修改原始 JSON,因为它是由第三方服务创建的,我从其服务器下载该服务。
如何在不将整个文件加载到内存中的情况下执行此操作?
我尝试使用gson库并创建这样的 bean:
public class MyJsonBean {
@SerializedName("a")
@Expose
public Integer a;
@SerializedName("b")
@Expose
public Double b;
@SerializedName("d")
@Expose
public Integer d;
}
Run Code Online (Sandbox Code Playgroud)
但即便如此,为了使用 Gson 反序列化它,我需要先下载并读取内存中的整个文件,然后将其作为字符串传递给 Gson?
File myFile = new File(<FILENAME>);
myFile.createNewFile();
URL url = new URL(<URL>);
OutputStream out = new BufferedOutputStream(new FileOutputStream(myFile)); …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 Springboot 应用程序,我想从前端打开一个预定的方法。(因为我希望调度程序仅在从前端调用该方法后运行)
然后,此计划方法将使用给定参数调用 Web 服务并继续运行,直到收到特定响应(“成功”)。
收到特定响应后,我希望计划的方法停止运行,直到从前端再次调用它。
我不确定如何开始和停止计划方法的执行。
我目前有这个:
@Component
public class ScheduledTasks {
private static final Logger LOG = LoggerFactory.getLogger(ScheduledTasks.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void waitForSuccess(String componentName) {
LOG.info("Running at: " + dateFormat.format(new Date()));
String response = MyWebService.checkStatus(componentName);
if ("success".equalsIgnoreCase(response)) {
LOG.info("success");
//Stop scheduling this method
} else {
LOG.info("keep waiting");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器,通过它可以打开预定的方法:
@Controller
public class MainController {
@GetMapping(/start/{componentName})
public @ResponseBody String startExecution(@PathVariable String componentName) {
//do some …Run Code Online (Sandbox Code Playgroud) 我有一个Java Spring Boot应用程序,该应用程序具有一个Scheduler,该Scheduler从Service调用异步任务。该任务需要几分钟(通常3-5分钟)才能完成。
通过从Spring Boot Controller调用API,也可以通过UI应用程序调用服务中相同的异步方法。
码:
排程器
@Component
public class ScheduledTasks {
@Autowired
private MyService myService;
@Scheduled(cron = "0 0 */1 * * ?")
public void scheduleAsyncTask() {
myService.doAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
服务
@Service
public class MyService {
@Async("threadTaskExecutor")
public void doAsync() {
//Do Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
控制者
@CrossOrigin
@RestController
@RequestMapping("/mysrv")
public class MyController {
@Autowired
private MyService myService;
@CrossOrigin
@RequestMapping(value = "/", method = RequestMethod.POST)
public void postAsyncUpdate() {
myService.doAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
调度程序每小时运行一次异步任务,但用户也可以从UI手动运行它。
但是,如果异步方法已经在执行过程中,我不希望它再次运行。
为此,我在数据库中创建了一个表,其中包含一个标志,该标志在方法运行时会亮起,然后在方法完成后将其关闭。
在我的服务课程中是这样的:
@Autowired
private MyDbRepo …Run Code Online (Sandbox Code Playgroud) 我有兴趣从 Google firebase Crashlytics 获取无崩溃用户统计信息和受崩溃趋势影响的用户。
我可以使用我的应用程序调用任何 API 以从 Firebase Crashlytics 导出数据吗?
我查看了其他一些类似的问题,例如:
,但他们实际上都没有提到从 Crashlytics 导出数据的解决方案。
正如上述问题之一所建议的,我可以将数据导出到 Big Query,然后自己计算无崩溃统计数据,但我之前没有使用过 Big Query,我不确定是否能够导出该数据来自 Big Query 的数据?
是否有可能以某种方式从 Crashlytics 中获取这些数据?
更新
更仔细地查看 Google Chrome 中的网络控制台,在为我的应用程序加载 Crashlytics 数据时,我可以看到 Crashlytics 对以下端点(及其身份验证/cookie)进行了 POST 调用:
https://***.google.com/v1/projects/***/clients/ios:abc.def.MyApp:getDailyRealtimeCrashUsersReport?alt=json&key=xyz
Run Code Online (Sandbox Code Playgroud)
对此的响应包含我正在寻找的确切数据:
{
"report": {
"dailyUsers": [
{
"dateMs": "xxxx",
"totalUsers": 1234,
"crashUsers": 12
}
...
...
],
"totalUsers": 12345,
"totalCrashUsers": 123
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以通过我的(Java)代码直接调用此 API 以及适当的身份验证(也许是 OAuth2?),并且跳过必须转到 BigQuery 并执行所有这些额外步骤?直接调用此端点并直接获取数据会更容易,而不是先将其导出到 BigQuery …
我有一个包含双值的String,例如:
String str = "0.1,0.4,0.9,0.1";
Run Code Online (Sandbox Code Playgroud)
我想从这个字符串中得到一个双数组,如下所示:
double[] arr = {0.1, 0.4, 0.9, 0.1};
Run Code Online (Sandbox Code Playgroud)
对我来说最明显的方法是:
String[] tokens = str.split(",");
double[] arr = new double[tokens.length];
int i=0
for (String st : tokens) {
arr[i++] = Double.valueOf(st);
}
Run Code Online (Sandbox Code Playgroud)
除了Java 8中提到的那个之外,还有更快/更好的方法吗?
我正在使用Rails 5.0.1进行Web开发并在Heroku上部署我的应用程序.我使用postgreSQL作为Heroku的数据库,使用sqlite3作为本地开发数据库.
我需要将account_numberAccounts表的一列链接到Transactions表中的两列.该account_number列不是Accounts表的主键.
并且,Transactions表有一列from_account,我想链接到表中的account_number列Accounts和另一列 - to_account我想链接到表的同一account_number列Accounts.
该account_number不是账表的主键,但它是独一无二的.
我试图在我的迁移文件中做这样的事情:
create_table :transactions do |t|
t.string :from_account, foreign_key: true
t.string :to_account, foreign_key: true
t.timestamps
end
add_foreign_key :transactions, column: :from_account, :accounts, column: :account_number
add_foreign_key :transactions, column: :to_account, :accounts, column: :account_number
Run Code Online (Sandbox Code Playgroud)
我的模型文件如下所示:
class Transaction < ApplicationRecord
belongs_to :from_account, :foreign_key => 'from_account', :class_name => 'Account'
belongs_to :to_account, :foreign_key => 'to_account', :class_name => 'Account'
end
Run Code Online (Sandbox Code Playgroud)
但这会给我的本地sqlite3数据库和Heroku的PostgreSQL数据库带来错误.
我如何在Rails5中模拟这样的东西.到目前为止,我在网上找到的所有教程都只讲述了如何链接到引用表的主键.
编辑 …
我有两个Jenkins Jobs- JobA和JobB。
我需要在JobA完成构建后开始执行JobB,并且需要将Job名称(即'JobA')和最新的内部版本号(刚刚完成的内部版本)传递给JobB。
除了这些,我还需要传递传递给JobA的原始参数,然后传递给JobB
我在JobA中添加了一个后构建操作- 在其他项目上触发参数化的构建,并在要构建的项目中指定JobB。在其中,我还添加了一个参数- 当前构建参数,它将把当前参数传递给下一个作业。
我还在JobB中添加了一个构建触发器-在构建其他项目并将其指定为Job Name的情况下进行构建。
现在,如何将JobA的jobName和buildNumber 传递给JobB?
在Git中,将文件添加到提交中时,我们可以添加所有与模式匹配的文件,如下所示:
git add **Component**
我发现此功能非常有用,可以快速添加许多具有相似名称的文件。
例如,如果我的所有文件都是根据组件命名的,那么我可以将对组件所做的所有更改快速添加到组件中。
同样,git中是否有办法添加所有要提交的文件(不包括与模式匹配的文件)?
就像是:
git add *.java --exclude **Component1**
这样,除了对component1的文件所做的更改之外,我所有的java文件都可以更改吗?
我在Java中有一个HashMaps的ArrayList,我想将它附加到另一个类似的列表,有没有办法做到这一点,以便生成的数组列表保留顺序.
例如:
List<Map<String, String>> list1 = new ArrayList<HashMap<String, String>>();
List<Map<String, String>> list1 = new ArrayList<HashMap<String, String>>();
list1.add(hm1);
list1.add(hm2);
list1.add(hm3);
list2.add(hm4);
list2.add(hm5);
list2.add(hm6);
Run Code Online (Sandbox Code Playgroud)
我想要的新列表是:
//list 3 = list1 + list2;
list3 = {hm1, hm2, hm3, hm4, hm5, hm6};
Run Code Online (Sandbox Code Playgroud)
怎么做?
java ×6
jenkins ×2
spring-boot ×2
arrays ×1
crashlytics ×1
firebase ×1
foreign-keys ×1
git ×1
git-add ×1
git-commit ×1
gson ×1
heroku ×1
json ×1
list ×1
postgresql ×1
rest ×1
split ×1
spring ×1
string ×1