小编Sum*_*mit的帖子

从 Jenkins REST API 获取所有作业的所有构建的构建详细信息

我有一个托管的 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

java rest jenkins

10
推荐指数
1
解决办法
9244
查看次数

如何解析一个巨大的 JSON 文件而不将其加载到内存中

我有一个很大的 JSON 文件 (2.5MB),包含大约 80000 行。

它看起来像这样:

{
  "a": 123,
  "b": 0.26,
  "c": [HUGE irrelevant object],
  "d": 32
}
Run Code Online (Sandbox Code Playgroud)

我只希望为 keys 存储整数值abd忽略 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)

java json gson

9
推荐指数
1
解决办法
3万
查看次数

如何在 springboot 应用程序中动态打开/关闭调度方法

我正在构建一个 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-scheduled spring-boot

8
推荐指数
2
解决办法
9600
查看次数

Spring Boot应用启动后调用方法

我有一个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)

java spring scheduled-tasks spring-boot

5
推荐指数
1
解决办法
1434
查看次数

如何将数据从 Firebase Crashlytics 导出到另一个应用程序?

我有兴趣从 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 …

google-analytics firebase google-bigquery crashlytics

5
推荐指数
1
解决办法
5887
查看次数

在Java8中将逗号分隔的double值字符串拆分为double数组

我有一个包含双值的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中提到的那个之外,还有更快/更好的方法吗?

java arrays string split

4
推荐指数
1
解决办法
1718
查看次数

如何在rails5中添加对表的非主键列的引用

我正在使用Rails 5.0.1进行Web开发并在Heroku上部署我的应用程序.我使用postgreSQL作为Heroku的数据库,使用sqlite3作为本地开发数据库.

我需要将account_numberAccounts表的一列链接到Transactions表中的两列.该account_number列不是Accounts表的主键.

并且,Transactions表有一列from_account,我想链接到表中的account_numberAccounts和另一列 - to_account我想链接到表的同一account_numberAccounts.

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中模拟这样的东西.到目前为止,我在网上找到的所有教程都只讲述了如何链接到引用表的主键.

编辑 …

postgresql ruby-on-rails foreign-keys heroku

3
推荐指数
1
解决办法
1654
查看次数

如何将作业名称和内部版本号作为参数传递给另一个詹金斯作业?

我有两个Jenkins Jobs- JobAJobB

我需要在JobA完成构建后开始执行JobB,并且需要将Job名称(即'JobA')和最新的内部版本号(刚刚完成的内部版本)传递给JobB

除了这些,我还需要传递传递给JobA的原始参数,然后传递给JobB

我在JobA中添加了一个后构建操作- 在其他项目上触发参数化的构建,并在要构建项目中指定JobB。在其中,我还添加了一个参数- 当前构建参数,它将把当前参数传递给下一个作业。

我还在JobB中添加了一个构建触发器-在构建其他项目并将其指定为Job Name的情况下进行构建

现在,如何将JobA的jobName和buildNumber 传递JobB

jenkins

3
推荐指数
1
解决办法
6661
查看次数

git添加与模式不匹配的文件

在Git中,将文件添加到提交中时,我们可以添加所有与模式匹配的文件,如下所示:

git add **Component**

我发现此功能非常有用,可以快速添加许多具有相似名称的文件。

例如,如果我的所有文件都是根据组件命名的,那么我可以将对组件所做的所有更改快速添加到组件中。

同样,git中是否有办法添加所有要提交的文件(不包括与模式匹配的文件)?

就像是:

git add *.java --exclude **Component1**

这样,除了对component1的文件所做的更改之外,我所有的java文件都可以更改吗?

git git-add git-commit

1
推荐指数
1
解决办法
66
查看次数

在Java中按特定顺序查询ArrayLists

我在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 list

0
推荐指数
1
解决办法
61
查看次数