forked from lix-project/hydra
RunCommandLogs: init table
This commit is contained in:
parent
f4e86a3236
commit
52843195db
|
@ -499,6 +499,21 @@ __PACKAGE__->belongs_to(
|
|||
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" },
|
||||
);
|
||||
|
||||
=head2 runcommandlogs
|
||||
|
||||
Type: has_many
|
||||
|
||||
Related object: L<Hydra::Schema::Result::RunCommandLogs>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"runcommandlogs",
|
||||
"Hydra::Schema::Result::RunCommandLogs",
|
||||
{ "foreign.build_id" => "self.id" },
|
||||
undef,
|
||||
);
|
||||
|
||||
=head2 aggregates
|
||||
|
||||
Type: many_to_many
|
||||
|
@ -528,8 +543,8 @@ __PACKAGE__->many_to_many(
|
|||
);
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-08-26 12:02:36
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WHdSVHhQykmUz0tR/TExVg
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-11-17 12:42:34
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ylttv/NTMDcSZumBXRCOCw
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"dependents",
|
||||
|
|
157
src/lib/Hydra/Schema/Result/RunCommandLogs.pm
Normal file
157
src/lib/Hydra/Schema/Result/RunCommandLogs.pm
Normal file
|
@ -0,0 +1,157 @@
|
|||
use utf8;
|
||||
package Hydra::Schema::Result::RunCommandLogs;
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader
|
||||
# DO NOT MODIFY THE FIRST PART OF THIS FILE
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Hydra::Schema::Result::RunCommandLogs
|
||||
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base 'DBIx::Class::Core';
|
||||
|
||||
=head1 COMPONENTS LOADED
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L<Hydra::Component::ToJSON>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->load_components("+Hydra::Component::ToJSON");
|
||||
|
||||
=head1 TABLE: C<runcommandlogs>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->table("runcommandlogs");
|
||||
|
||||
=head1 ACCESSORS
|
||||
|
||||
=head2 id
|
||||
|
||||
data_type: 'integer'
|
||||
is_auto_increment: 1
|
||||
is_nullable: 0
|
||||
sequence: 'runcommandlogs_id_seq'
|
||||
|
||||
=head2 job_matcher
|
||||
|
||||
data_type: 'text'
|
||||
is_nullable: 0
|
||||
|
||||
=head2 build_id
|
||||
|
||||
data_type: 'integer'
|
||||
is_foreign_key: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 command
|
||||
|
||||
data_type: 'text'
|
||||
is_nullable: 0
|
||||
|
||||
=head2 start_time
|
||||
|
||||
data_type: 'integer'
|
||||
is_nullable: 1
|
||||
|
||||
=head2 end_time
|
||||
|
||||
data_type: 'integer'
|
||||
is_nullable: 1
|
||||
|
||||
=head2 error_number
|
||||
|
||||
data_type: 'integer'
|
||||
is_nullable: 1
|
||||
|
||||
=head2 exit_code
|
||||
|
||||
data_type: 'integer'
|
||||
is_nullable: 1
|
||||
|
||||
=head2 signal
|
||||
|
||||
data_type: 'integer'
|
||||
is_nullable: 1
|
||||
|
||||
=head2 core_dumped
|
||||
|
||||
data_type: 'boolean'
|
||||
is_nullable: 1
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->add_columns(
|
||||
"id",
|
||||
{
|
||||
data_type => "integer",
|
||||
is_auto_increment => 1,
|
||||
is_nullable => 0,
|
||||
sequence => "runcommandlogs_id_seq",
|
||||
},
|
||||
"job_matcher",
|
||||
{ data_type => "text", is_nullable => 0 },
|
||||
"build_id",
|
||||
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
|
||||
"command",
|
||||
{ data_type => "text", is_nullable => 0 },
|
||||
"start_time",
|
||||
{ data_type => "integer", is_nullable => 1 },
|
||||
"end_time",
|
||||
{ data_type => "integer", is_nullable => 1 },
|
||||
"error_number",
|
||||
{ data_type => "integer", is_nullable => 1 },
|
||||
"exit_code",
|
||||
{ data_type => "integer", is_nullable => 1 },
|
||||
"signal",
|
||||
{ data_type => "integer", is_nullable => 1 },
|
||||
"core_dumped",
|
||||
{ data_type => "boolean", is_nullable => 1 },
|
||||
);
|
||||
|
||||
=head1 PRIMARY KEY
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L</id>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->set_primary_key("id");
|
||||
|
||||
=head1 RELATIONS
|
||||
|
||||
=head2 build
|
||||
|
||||
Type: belongs_to
|
||||
|
||||
Related object: L<Hydra::Schema::Result::Builds>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->belongs_to(
|
||||
"build",
|
||||
"Hydra::Schema::Result::Builds",
|
||||
{ id => "build_id" },
|
||||
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },
|
||||
);
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-11-18 12:35:52
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:N0G71diB8DNDgkYgaSQrFA
|
||||
|
||||
|
||||
|
||||
# You can replace this text with custom code or comments, and it will be preserved on regeneration
|
||||
1;
|
|
@ -562,6 +562,55 @@ create table TaskRetries (
|
|||
);
|
||||
create index IndexTaskRetriesOrdered on TaskRetries(retry_at asc);
|
||||
|
||||
|
||||
-- Records of RunCommand executions
|
||||
--
|
||||
-- The intended flow is:
|
||||
--
|
||||
-- 1. Create a RunCommandLogs entry when the task is "queued" to run
|
||||
-- 2. Update the start_time when it begins
|
||||
-- 3. Update the end_time and exit_code when it completes
|
||||
create table RunCommandLogs (
|
||||
id serial primary key not null,
|
||||
job_matcher text not null,
|
||||
build_id integer not null,
|
||||
-- TODO: evaluation_id integer not null,
|
||||
-- can we do this in a principled way? a build can be part of many evaluations
|
||||
-- but a "bug" of RunCommand, imho, is that it should probably run per evaluation?
|
||||
command text not null,
|
||||
start_time integer,
|
||||
end_time integer,
|
||||
error_number integer,
|
||||
exit_code integer,
|
||||
signal integer,
|
||||
core_dumped boolean,
|
||||
|
||||
foreign key (build_id) references Builds(id) on delete cascade,
|
||||
-- foreign key (evaluation_id) references Builds(id) on delete cascade,
|
||||
|
||||
|
||||
constraint RunCommandLogs_not_started_no_exit_time_no_code check (
|
||||
-- If start time is null, then end_time, exit_code, signal, and core_dumped should be null.
|
||||
-- A logical implication operator would be nice :).
|
||||
(start_time is not null) or (
|
||||
end_time is null
|
||||
and error_number is null
|
||||
and exit_code is null
|
||||
and signal is null
|
||||
and core_dumped is null
|
||||
)
|
||||
),
|
||||
constraint RunCommandLogs_end_time_has_start_time check (
|
||||
-- If end time is not null, then end_time, exit_code, and core_dumped should not be null
|
||||
(end_time is null) or (start_time is not null)
|
||||
)
|
||||
|
||||
-- Note: if exit_code is not null then signal and core_dumped must be null.
|
||||
-- Similarly, if signal is not null then exit_code must be null and
|
||||
-- core_dumped must not be null. However, these semantics are tricky
|
||||
-- to encode as constraints and probably provide limited actual value.
|
||||
);
|
||||
|
||||
-- The output paths that have permanently failed.
|
||||
create table FailedPaths (
|
||||
path text primary key not null
|
||||
|
|
|
@ -38,6 +38,7 @@ make_schema_at("Hydra::Schema", {
|
|||
"nrbuilds" => "NrBuilds",
|
||||
"projectmembers" => "ProjectMembers",
|
||||
"projects" => "Projects",
|
||||
"runcommandlogs" => "RunCommandLogs",
|
||||
"schemaversion" => "SchemaVersion",
|
||||
"starredjobs" => "StarredJobs",
|
||||
"systemstatus" => "SystemStatus",
|
||||
|
|
Loading…
Reference in a new issue